Adds class methods to Merb::Request object. Sets up repository of session store types. Sets the session ID key and expiry values.
:api: private
# File lib/merb-core/dispatch/session.rb, line 125 125: def self.included(base) 126: base.extend ClassMethods 127: 128: # Keep track of all known session store types. 129: base.cattr_accessor :registered_session_types 130: base.registered_session_types = Dictionary.new 131: base.class_inheritable_accessor :_session_id_key, :_session_secret_key, 132: :_session_expiry, :_session_secure, 133: :_session_http_only, :_default_cookie_domain 134: 135: base._session_id_key = Merb::Config[:session_id_key] || '_session_id' 136: base._session_expiry = Merb::Config[:session_expiry] || 0 137: base._session_secret_key = Merb::Config[:session_secret_key] 138: base._session_secure = Merb::Config[:session_secure] || false 139: base._session_http_only = Merb::Config[:session_http_only] || false 140: base._default_cookie_domain = Merb::Config[:default_cookie_domain] 141: end
The default session store type.
:api: private
# File lib/merb-core/dispatch/session.rb, line 162 162: def default_session_store 163: Merb::Config[:session_store] && Merb::Config[:session_store].to_sym 164: end
Teardown and/or persist the current sessions.
:api: private
# File lib/merb-core/dispatch/session.rb, line 237 237: def finalize_session 238: session_stores.each { |name, store| store.finalize(self) } 239: end
Returns session container. Merb is able to handle multiple session stores, hence a parameter to pick it.
session_store | The type of session store to access, |
defaults to default_session_store.
If no suitable session store type is given, it defaults to cookie-based sessions.
SessionContainer | an instance of a session store extending Merb::SessionContainer. |
:api: public
# File lib/merb-core/dispatch/session.rb, line 190 190: def session(session_store = nil) 191: session_store ||= default_session_store 192: if class_name = self.class.registered_session_types[session_store] 193: session_stores[session_store] ||= Object.full_const_get(class_name).setup(self) 194: elsif fallback = self.class.registered_session_types.keys.first 195: Merb.logger.warn "Session store '#{session_store}' not found. Check your configuration in init file." 196: Merb.logger.warn "Falling back to #{fallback} session store." 197: session(fallback) 198: else 199: msg = "No session store set. Set it in init file like this: c[:session_store] = 'activerecord'" 200: Merb.logger.error!(msg) 201: raise NoSessionContainer, msg 202: end 203: end
new_session | A session store instance. |
The session is assigned internally by its session_store_type key.
:api: private
# File lib/merb-core/dispatch/session.rb, line 212 212: def session=(new_session) 213: if self.session?(new_session.class.session_store_type) 214: original_session_id = self.session(new_session.class.session_store_type).session_id 215: if new_session.session_id != original_session_id 216: set_session_id_cookie(new_session.session_id) 217: end 218: end 219: session_stores[new_session.class.session_store_type] = new_session 220: end
Whether a session has been setup
Boolean | true if the session is part of the session stores configured. |
:api: private
# File lib/merb-core/dispatch/session.rb, line 228 228: def session?(session_store = nil) 229: (session_store ? [session_store] : session_stores).any? do |type, store| 230: store.is_a?(Merb::SessionContainer) 231: end 232: end
Hash | All active session stores by type. |
:api: private
# File lib/merb-core/dispatch/session.rb, line 170 170: def session_stores 171: @session_stores ||= {} 172: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.