class ActionDispatch::Session::CookieStore

Note that changing digest or secret invalidates all existing sessions!
“rake secret” and set the key in config/initializers/secret_token.rb.
To generate a secret key for an existing application, run
such as ‘MD5’, ‘RIPEMD160’, ‘SHA256’, etc.
integrity defaults to ‘SHA1’ but may be any digest provided by OpenSSL,
* :digest: The message digest algorithm used to verify session
:secret => Proc.new { User.current_user.secret_key }
:secret => ‘449fe2e7daee471bffae2fd8dc02313d’
characters. Examples:
a secret consisting of random numbers and letters and more than 30
is not vulnerable to a dictionary attack. Therefore, you should choose
CGI::Session instance as an argument. It’s important that the secret
string called per generated digest. The block is called with the
* :secret: An application-wide key string or block returning a
Session options:
in config/environment.rb. Set your own for old apps you’re upgrading.
included in the hash. New apps are generated with a pregenerated secret
a user cannot alter his user_id without knowing the secret key
A message digest is included with the cookie to ensure data integrity:
CookieOverflow is raised if you attempt to store more than 4K of data.
visible to the user, pick another session store.
If you have more than 4K of session data or don’t want your data to be
alternatives.
size limit. Cookie-based sessions are dramatically faster than the
contain at most a user_id and flash message; both fit within the 4K cookie
This cookie-based session store is the Rails default. Sessions typically

def destroy(env)

def destroy(env)
  # session data is stored on client; nothing to do here
end

def extract_session_id(env)

def extract_session_id(env)
  if data = unpacked_cookie_data(env)
    data["session_id"]
  else
    nil
  end
end

def initialize(app, options = {})

def initialize(app, options = {})
  super(app, options.merge!(:cookie_only => true))
  freeze
end

def load_session(env)

def load_session(env)
  data = unpacked_cookie_data(env)
  data = persistent_session_id!(data)
  [data["session_id"], data]
end

def persistent_session_id!(data, sid=nil)

def persistent_session_id!(data, sid=nil)
  data ||= {}
  data["session_id"] ||= sid || generate_sid
  data
end

def set_cookie(request, options)

def set_cookie(request, options)
  request.cookie_jar.signed[@key] = options
end

def set_session(env, sid, session_data)

def set_session(env, sid, session_data)
  persistent_session_id!(session_data, sid)
end

def unpacked_cookie_data(env)

def unpacked_cookie_data(env)
  env["action_dispatch.request.unsigned_session_cookie"] ||= begin
    stale_session_check! do
      request = ActionDispatch::Request.new(env)
      if data = request.cookie_jar.signed[@key]
        data.stringify_keys!
      end
      data || {}
    end
  end
end