是否可以“及时”创建Rails会话?

时间:2010-11-09 12:08:02

标签: ruby-on-rails caching session cookies varnish

我对Ruby on Rails中会话生命周期的理解(特别是v3及更高版本)是在请求开始时为每个请求创建会话,如果该请求不包含现有会话cookie将创建一个新的,否则会话cookie被反序列化并存储在会话哈希中。

当然,这样做的目的是支持许多安全功能,例如CSRF等。

然而,当涉及到使用HTTP缓存服务和代理(例如Varnish)的站点中的页面缓存时,这会带来一些问题,因为大多数配置往往会在这两个上删除这些(通常是所有)cookie。请求和响应结束(因为缓存通常用于广义受众)。

我知道可以设置Varnish等来创建包含cookie详细信息的对象哈希,这会将缓存的数据范围限定到该会话(并为此用户),但是我想知道这是否是完全必要的

我有一个相当“静态”的应用程序 - 内容从数据库中提取,呈现为一个可以缓存的页面 - 有一些元素(例如评论计数,'最近'项目等)可以使用ESI添加,但是对于每个请求,Rails仍然倾向于设置新会话,并且当用户已经有会话时,缓存服务器会删除这些内容。

我想知道是否可能(通过预先存在的功能,或者自己构建功能)允许开发人员控制何时需要会话,并且只有在指定会话时才是后退和前进cookie,会话初始化/反序列化等必要。

那,或者我正在以错误的方式思考这个问题,需要从另一个角度来解决这个问题...

2 个答案:

答案 0 :(得分:1)

据我所知,通过ActionController :: SessionManagement

可以相当深入地控制rails会话

http://ap.rubyonrails.org/classes/ActionController/SessionManagement/ClassMethods.html#M000070

API文档中有一些示例可以按操作,每个控制器等禁用它。

答案 1 :(得分:1)

如果您的网站主要是静态的,那么您可能希望使用整页缓存。这将Rails完全取出请求,让内容生成后让Web服务器处理它。根据您的确切需要,可能会引起一些严重的麻烦,尽管评论数量和用户细节也是如此。