2016-10-02 5 views
0

キャッシュストアとしてFileStoreを、セッションストアとしてDalliStoreを使用していましたが、Rails.cache.clearを実行できました。セッションの問題はまったくありません。Rails.cache.clearはログインしているすべてのユーザーをログアウトしています(セッションのクリア)

キャッシュストアをmem_cache_storeに移動したので、Rails.cache.clearを実行するとキャッシュがクリアされますが、すべてのユーザーがすべてのセッションを破棄してサインアウトします。

これは意図した動作ですか?

+0

私はあなたのキャッシュとセッションストレージに同じmemcached設定を使用していると思いますか? – phoet

答えて

0

@phoetが正しかった。私のinitializers/session_storeでは、config.session_storeがCacheStoreに設定されていました。これはRails 4のデフォルトではありません。これはcookie_storeです。

これは、混乱していることです(と私は光を見るようになりました)。これは、どのキャッシュストアのマカニズムを選択しても、常に同じファイルに設定した名前'xxx'オプション - このキーは実際にはクッキー名であり、あなたはそれを暗号化するためにsecrets.ymlで設定したキーとは関係ありません)。

デフォルトのストア・マカニズム(:cookie_store)を使用すると、「セッション・ハッシュ」全体がCookieに格納され、サーバー(database/memcached)には格納されません。すべてのものがそのクッキーに直接読み書きされます(これは、secret_key_baseを設定した場合、Rails 4の起動は常に暗号化されます)。

他のストレージ(CacheStoreやActiveRecordStoreなど)を使用すると、 'key'オプションで設定したのと同じ名前のCookieが存在しますが、デコードした場合はそのためのsecret_key_baseが必要です、あなたはセッションIDが含まれているだけ表示され、その後、Railsはデータベース(ActiveRecord)またはmemcached(CacheStore、あなたがmemcachedを使用していると考えて、そのセッションに対応するデータを探しますキャッシュを格納するためのFileStoreが、別の設定です)。

私のセッションストアがCacheStoreに設定されているので、Rails.cache.clearを実行したときにクッキーは削除されていませんでした(もちろんクライアント側にあります)。しかし、RailsがセッションIDを取得したときmemcachedに一致するものは見つかりませんでした。

関連する問題