簡體   English   中英

Rails.cache.clear正在注銷所有已登錄的用戶(清除會話)

[英]Rails.cache.clear is signing out all logged in users (clearing sessions)

當我們將FileStore用作緩存存儲區並將DalliStore用作會話存儲區時,我們可以運行Rails.cache.clear,它將簡單地清除緩存,而在Sessions中沒有任何問題。

現在,我們將緩存存儲區移到了mem_cache_store,如果運行Rails.cache.clear我們將清除緩存,同時也注銷每個用戶,銷毀所有會話。

這是預期的行為嗎?

@phoet是正確的。 在我的初始值設定項/ session_store中,config.session_store設置為CacheStore。 這不是Rails 4中的默認值::cookie_store。

令人困惑的是(現在我明白了):無論您選擇哪種緩存存儲機制,在存儲機制之后,瀏覽器中始終會存儲一個cookie(使用您在該文件中設置的名稱),在密鑰:“ xxx”選項中-該密鑰實際上是cookie名稱,與您在secrets.yml中設置的用於加密的密鑰無關)。

如果您使用默認的存儲機制(:cookie_store),則整個“會話哈希”將存儲在cookie中,而服務器上將不存儲任何內容(數據庫/內存緩存)。 所有內容都將直接在該cookie中讀取和寫入(如果您設置secret_key_base,則從Rails 4開始始終對其進行加密)。

如果您使用任何其他存儲(例如CacheStore或ActiveRecordStore),則cookie仍將存在,其名稱與您在'key'選項中設置的名稱相同,但如果對其進行了解碼,則將其保留(為此您需要secret_key_base,谷歌用於解碼)您將看到的Rails 4會話)將僅包含會話ID,然后考慮到您使用的是memcached而不是FileStore來存儲緩存,Rails會在數據庫(ActiveRecord)或memcached(CacheStore)中查找與該會話相對應的數據,但這是另一個配置)。

因此,由於我的會話存儲設置為CacheStore,所以當我執行Rails.cache.clear時,cookie並未被刪除(當然是在客戶端),但是當Rails在該cookie中獲得會話ID時,它無法在memcached中找到與之匹配的任何內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM