Determines how many times to try generating a unique session key before we give up
Generates a new session ID and creates a new session.
The new session. |
:api: private
# File lib/merb-core/dispatch/session/store_container.rb, line 59 def generate # make sure we generate a unique session uuid sid = nil GENERATE_MAX_TRIES.times do |i| sid = Merb::SessionMixin.rand_uuid data = store.retrieve_session(sid) rescue nil break if data.nil? raise "Unable to Generate Unique Session key" if i == (GENERATE_MAX_TRIES-1) end session = new(sid) session.needs_new_cookie = true session end
Setup a new session or retreive an existing session.
request<Merb::Request> |
The Merb::Request that came in from Rack. |
If no sessions were found, a new SessionContainer will be generated.
:api: private
# File lib/merb-core/dispatch/session/store_container.rb, line 87 def setup(request) session = retrieve(request.session_id) request.session = session # TODO Marshal.dump is slow - needs optimization session._fingerprint = Marshal.dump(request.session.to_hash).hash session end
Teardown and/or persist the current session.
If @_destroy is true, clear out the session completely, including removal of the session cookie itself.
request<Merb::Request> |
The Merb::Request that came in from Rack. |
The data (self) is converted to a Hash first, since a container might choose to do a full Marshal on the data, which would make it persist attributes like 'needs_new_cookie', which it shouldn't.
:api: private
# File lib/merb-core/dispatch/session/store_container.rb, line 148 def finalize(request) if @_destroy store.delete_session(self.session_id) request.destroy_session_cookie else if _fingerprint != Marshal.dump(data = self.to_hash).hash begin store.store_session(request.session(self.class.session_store_type).session_id, data) rescue => err Merb.logger.warn!("Could not persist session to #{self.class.name}: #{err.message}") end end if needs_new_cookie || Merb::SessionMixin.needs_new_cookie? request.set_session_id_cookie(self.session_id) end end end
Generated with the Darkfish Rdoc Generator 2.