我对Ruby on Rails中会话生命周期的理解(特别是v3及更高版本)是在请求开始时为每个请求创建会话,如果该请求不包含现有会话cookie将创建一个新的,否则会话cookie被反序列化并存储在会话哈希中。
当然,这样做的目的是支持许多安全功能,例如CSRF等。
然而,当涉及到使用HTTP缓存服务和代理(例如Varnish)的站点中的页面缓存时,这会带来一些问题,因为大多数配置往往会在这两个上删除这些(通常是所有)cookie。请求和响应结束(因为缓存通常用于广义受众)。
我知道可以设置Varnish等来创建包含cookie详细信息的对象哈希,这会将缓存的数据范围限定到该会话(并为此用户),但是我想知道这是否是完全必要的
我有一个相当“静态”的应用程序 - 内容从数据库中提取,呈现为一个可以缓存的页面 - 有一些元素(例如评论计数,'最近'项目等)可以使用ESI添加,但是对于每个请求,Rails仍然倾向于设置新会话,并且当用户已经有会话时,缓存服务器会删除这些内容。
我想知道是否可能(通过预先存在的功能,或者自己构建功能)允许开发人员控制何时需要会话,并且只有在指定会话时才是后退和前进cookie,会话初始化/反序列化等必要。
那,或者我正在以错误的方式思考这个问题,需要从另一个角度来解决这个问题...
答案 0 :(得分:1)
据我所知,通过ActionController :: SessionManagement
可以相当深入地控制rails会话http://ap.rubyonrails.org/classes/ActionController/SessionManagement/ClassMethods.html#M000070
API文档中有一些示例可以按操作,每个控制器等禁用它。
答案 1 :(得分:1)
如果您的网站主要是静态的,那么您可能希望使用整页缓存。这将Rails完全取出请求,让内容生成后让Web服务器处理它。根据您的确切需要,可能会引起一些严重的麻烦,尽管评论数量和用户细节也是如此。