Action Dispatch Session CookieStore¶ ↑
这是基于 cookie 的默认会话存储,比其他替代方案快得多。
会话通常最多包含用户 ID 和 flash 消息;这两者都符合 4096 字节的 cookie 大小限制。如果您尝试存储超过 4096 字节的数据,将引发 CookieOverflow 异常。
用于存储的 cookie 罐会自动配置为根据应用程序的配置成为最佳选项。
您的 cookie 将使用应用程序的 secret_key_base 进行加密。这比签名 cookie 更进一步,因为加密的 cookie 不会被用户篡改或读取。这是 Rails 4 及更高版本的默认设置。
在 initializer 中配置您的会话存储
Rails.application.config.session_store :cookie_store, key: '_your_app_session'
在开发和测试环境中,您的应用程序的 secret_key_base 由 Rails 生成,并存储在 tmp/local_secret.txt 的临时文件中。在所有其他环境中,它将加密存储在 config/credentials.yml.enc 文件中。
如果您的应用程序未更新为 Rails 5.2 的默认设置,secret_key_base 将在旧的 config/secrets.yml 文件中找到。
请注意,更改您的 secret_key_base 将使所有现有会话失效。此外,在更改它之前,您应该注意不要依赖于能够解码由您的应用程序生成的签名 cookie(在外部应用程序或 JavaScript 中)。
由于 CookieStore 扩展了 Rack::Session::Abstract::Persisted,因此其中描述的许多选项都可以用于自定义生成的会话 cookie。例如:
Rails.application.config.session_store :cookie_store, expire_after: 14.days
将设置会话 cookie,使其在创建后 14 天自动过期。其他有用的选项包括 :key、:secure、:httponly 和 :same_site。
- D
- L
- N
类公共方法
new(app, options = {}) Link
实例公共方法
delete_session(req, session_id, options) Link
# File actionpack/lib/action_dispatch/middleware/session/cookie_store.rb, line 70 def delete_session(req, session_id, options) new_sid = generate_sid unless options[:drop] # Reset hash and Assign the new session id req.set_header("action_dispatch.request.unsigned_session_cookie", new_sid ? { "session_id" => new_sid.public_id } : {}) new_sid end