Methods
Constants
| ENV_SESSION_KEY | = | 'rack.session'.freeze |
| ENV_SESSION_OPTIONS_KEY | = | 'rack.session.options'.freeze |
| DEFAULT_OPTIONS | = | { :key => '_session_id', :path => '/', :domain => nil, :expire_after => nil, :secure => false, :httponly => true, :cookie_only => true } |
Public Class methods
[ show source ]
# File actionpack/lib/action_dispatch/middleware/session/abstract_store.rb, line 139 def initialize(app, options = {}) @app = app @default_options = DEFAULT_OPTIONS.merge(options) @key = @default_options.delete(:key).freeze @cookie_only = @default_options.delete(:cookie_only) ensure_session_key! end
Public Instance methods
[ show source ]
# File actionpack/lib/action_dispatch/middleware/session/abstract_store.rb, line 147 def call(env) prepare!(env) response = @app.call(env) session_data = env[ENV_SESSION_KEY] options = env[ENV_SESSION_OPTIONS_KEY] if !session_data.is_a?(AbstractStore::SessionHash) || session_data.loaded? || options[:expire_after] session_data.send(:load!) if session_data.is_a?(AbstractStore::SessionHash) && !session_data.loaded? sid = options[:id] || generate_sid session_data = session_data.to_hash value = set_session(env, sid, session_data) return response unless value cookie = { :value => value } unless options[:expire_after].nil? cookie[:expires] = Time.now + options.delete(:expire_after) end request = ActionDispatch::Request.new(env) set_cookie(request, cookie.merge!(options)) end response end