[英]Clearing part of the Rails cache and not all of it with 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.