Class: Merb::SessionStoreContainer
- Inherits:
-
SessionContainer
- Object
- Mash
- SessionContainer
- Merb::SessionStoreContainer
- Defined in:
- lib/merb-core/dispatch/session/store_container.rb
Direct Known Subclasses
Constant Summary collapse
- GENERATE_MAX_TRIES =
Determines how many times to try generating a unique session key before we give up
100
Instance Attribute Summary collapse
-
#_fingerprint ⇒ Object
:api: private.
Attributes inherited from SessionContainer
#needs_new_cookie, #session_id
Class Method Summary collapse
-
.generate ⇒ Object
Generates a new session ID and creates a new session.
-
.setup(request) ⇒ Object
Setup a new session or retreive an existing session.
Instance Method Summary collapse
-
#finalize(request) ⇒ Object
Teardown and/or persist the current session.
-
#regenerate ⇒ Object
Regenerate the session ID.
Methods inherited from SessionContainer
#clear!, inherited, #initialize
Constructor Details
This class inherits a constructor from Merb::SessionContainer
Instance Attribute Details
#_fingerprint ⇒ Object
:api: private
7 8 9 |
# File 'lib/merb-core/dispatch/session/store_container.rb', line 7 def _fingerprint @_fingerprint end |
Class Method Details
.generate ⇒ Object
Generates a new session ID and creates a new session.
Returns
- SessionStoreContainer
-
The new session.
:api: private
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# 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. = true session end |
.setup(request) ⇒ Object
Setup a new session or retreive an existing session.
Parameters
- request<Merb::Request>
-
The Merb::Request that came in from Rack.
Notes
If no sessions were found, a new SessionContainer will be generated.
Returns
- SessionContainer
-
a SessionContainer.
:api: private
87 88 89 90 91 92 93 |
# 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 |
Instance Method Details
#finalize(request) ⇒ Object
Teardown and/or persist the current session.
If @_destroy is true, clear out the session completely, including removal of the session cookie itself.
Parameters
- request<Merb::Request>
-
The Merb::Request that came in from Rack.
Notes
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
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
# File 'lib/merb-core/dispatch/session/store_container.rb', line 148 def finalize(request) if @_destroy store.delete_session(self.session_id) request. 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.}") end end if || Merb::SessionMixin. request.(self.session_id) end end end |
#regenerate ⇒ Object
Regenerate the session ID.
:api: private
169 170 171 172 173 |
# File 'lib/merb-core/dispatch/session/store_container.rb', line 169 def regenerate store.delete_session(self.session_id) self.session_id = Merb::SessionMixin.rand_uuid store.store_session(self.session_id, self) end |