【发布时间】:2011-05-07 05:09:42
【问题描述】:
我对 Ruby on Rails(特别是 v3 及更高版本)中会话生命周期的理解是,会话是在请求开始时为每个请求创建的,并且如果该请求不携带现有会话 cookie将创建一个新的,否则会话 cookie 将被反序列化并存储在会话哈希中。
这样做的目的当然是支持一些安全功能,例如 CSRF 等。
但是,当涉及到使用 HTTP 缓存服务和代理(例如 Varnish)在站点中缓存页面时,这会带来一些问题,因为大多数配置往往会在请求和响应结束(因为缓存通常是针对一般受众的)。
我知道可以设置 Varnish 等来创建包含 cookie 详细信息的对象哈希,这会将缓存的数据范围限定为该会话(以及该用户),但是我想知道这是否完全有必要.
我有一个本质上相当“静态”的应用程序 - 内容从数据库中提取,呈现到可以缓存的页面中 - 有一些元素(例如评论计数,“最近”项目等)可以通过 ESI 添加,但是对于每个请求,Rails 仍然倾向于设置一个新会话,并且当用户已经有一个会话时,缓存服务器会删除这些内容。
我想知道是否有可能(通过预先存在的功能,或自己构建功能)允许开发人员控制何时需要会话,并且只有在指定时才能与cookie、会话初始化/反序列化等必要。
那个,或者我想错了这个问题,需要换个角度来解决这个问题……
【问题讨论】:
-
如果您只是保持原样并执行 ajax 调用以加载页面的“用户特定”部分,它是否有效?
标签: ruby-on-rails caching session cookies varnish