我对 Ruby on Rails(特别是 v3 及更高版本)中会话生命周期的理解是,会话是在请求开始时为每个请求创建的,如果该请求不携带现有会话 cookie,则创建一个新会话将被创建,否则会话 cookie 将被反序列化并存储在会话哈希中。
当然,这样做的目的是支持许多安全功能,例如 CSRF 等。
但是,当涉及到使用 HTTP 缓存服务和代理(例如 Varnish)在站点中缓存页面时,这会带来一些问题,因为大多数配置倾向于在请求和响应中去除这些(通常是所有)cookie结束(因为缓存通常是为一般观众准备的)。
我知道可以设置 Varnish 等来创建包含 cookie 详细信息的对象哈希,这会将缓存的数据范围限定为该会话(以及该用户),但是我想知道这是否完全有必要。
我有一个本质上相当“静态”的应用程序 - 内容是从数据库中提取的,呈现到可以缓存的页面中 - 有一些元素(例如评论计数,“最近”项目等)可以是添加了一个 ESI,但是对于每个请求,Rails 仍然倾向于设置一个新会话,并且当用户已经有一个会话时,缓存服务器会删除这些内容。
我想知道是否有可能(通过预先存在的功能,或自己构建功能)允许开发人员控制何时需要会话,并且只有在指定时才使用 cookie、会话初始化/反序列化等必要。
那,或者我正在以错误的方式思考这个问题,需要从另一个角度解决这个问题......