123456789_123456789_123456789_123456789_123456789_

Class: ActionDispatch::Session::CacheStore

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
self, AbstractStore, Rack::Session::Abstract::ID
Instance Chain:
self, AbstractStore, StaleSessionCheck, Compatibility, Rack::Session::Abstract::ID
Inherits: ActionDispatch::Session::AbstractStore
Defined in: actionpack/lib/action_dispatch/middleware/session/cache_store.rb

Overview

::ActionDispatch::Session store that uses an ::ActiveSupport::Cache::Store to store the sessions. This store is most useful if you don't store critical data in your sessions and you don't need them to live for extended periods of time.

Class Method Summary

Instance Method Summary

Constructor Details

.new(app, options = {}) ⇒ CacheStore

Create a new store. The cache to use can be passed in the :cache option. If it is not specified, Rails.cache will be used.

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/middleware/session/cache_store.rb', line 11

def initialize(app, options = {})
  @cache = options[:cache] || Rails.cache
  options[:expire_after] ||= @cache.options[:expires_in]
  super
end

Instance Method Details

#destroy_session(env, sid, options)

Remove a session from the cache.

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/middleware/session/cache_store.rb', line 37

def destroy_session(env, sid, options)
  @cache.delete(cache_key(sid))
  generate_sid
end

#get_session(env, sid)

Get a session from the cache.

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/middleware/session/cache_store.rb', line 18

def get_session(env, sid)
  unless sid and session = @cache.read(cache_key(sid))
    sid, session = generate_sid, {}
  end
  [sid, session]
end

#set_session(env, sid, session, options)

Set a session in the cache.

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/middleware/session/cache_store.rb', line 26

def set_session(env, sid, session, options)
  key = cache_key(sid)
  if session
    @cache.write(key, session, :expires_in => options[:expire_after])
  else
    @cache.delete(key)
  end
  sid
end