Action Dispatch Session
CookieStore
這個基於 cookie 的會話儲存是 Rails
的預設值,它比其他選項快上許多。
會話通常最多包含使用者 ID 和快閃訊息;這兩者都符合 4096 位元組的 cookie 大小限制。如果您嘗試儲存超過 4096 位元組的資料,將會引發 CookieOverflow
例外。
用於儲存的 cookie jar 會自動設定成符合您應用程式組態的最佳選項。
您的 cookies 會使用應用程式的 secret_key_base
進行加密。這比簽署的 cookies 更進一步,因為使用者的加密 cookies 無法被變更或讀取。這是從 Rails
4 開始的預設值。
在初始設定中設定您的會話儲存
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
會讓所有現有的會話失效。此外,您應注意在變更 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 = {}) 連結
來源: 顯示 | 在 GitHub 上
# File actionpack/lib/action_dispatch/middleware/session/cookie_store.rb, line 64 def initialize(app, options = {}) options[:cookie_only] = true options[:same_site] = DEFAULT_SAME_SITE if !options.key?(:same_site) super end
執行個體公有方法
delete_session(req, session_id, options) 連結
來源: 顯示 | 在 GitHub 上
# 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
load_session(req) 連結
來源: 顯示 | 在 GitHub 上
# File actionpack/lib/action_dispatch/middleware/session/cookie_store.rb, line 77 def load_session(req) stale_session_check! do data = unpacked_cookie_data(req) data = persistent_session_id!(data) [Rack::Session::SessionId.new(data["session_id"]), data] end end