class ActionDispatch::Session::CacheStore
By default, the :expires_in
option of the cache is used.
* expire_after
- The length of time a session will be stored before automatically expiring.
* cache
- The cache to use. If it is not specified, Rails.cache
will be used.
==== Options
of time.
if you don’t store critical data in your sessions and you don’t need them to live for extended periods
A session store that uses an ActiveSupport::Cache::Store to store the sessions. This store is most useful
= Action Dispatch Session CacheStore
def cache_key(id)
def cache_key(id) "_session_id:#{id}" end
def delete_session(env, sid, options)
def delete_session(env, sid, options) @cache.delete(cache_key(sid.private_id)) @cache.delete(cache_key(sid.public_id)) generate_sid end
def find_session(env, sid)
def find_session(env, sid) unless sid && (session = get_session_with_fallback(sid)) sid, session = generate_sid, {} end [sid, session] end
def get_session_with_fallback(sid)
def get_session_with_fallback(sid) @cache.read(cache_key(sid.private_id)) || @cache.read(cache_key(sid.public_id)) end
def initialize(app, options = {})
def initialize(app, options = {}) @cache = options[:cache] || Rails.cache options[:expire_after] ||= @cache.options[:expires_in] super end
def write_session(env, sid, session, options)
def write_session(env, sid, session, options) key = cache_key(sid.private_id) if session @cache.write(key, session, expires_in: options[:expire_after]) else @cache.delete(key) end sid end