Class: Merb::SessionStoreContainer
- Inherits:
-
SessionContainer
- Object
- Mash
- SessionContainer
- Merb::SessionStoreContainer
- Defined in:
- lib/merb-core/dispatch/session/store_container.rb
Direct Known Subclasses
Instance Attribute Summary collapse
-
#_fingerprint ⇒ Object
Returns the value of attribute _fingerprint.
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.
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
Returns the value of attribute _fingerprint.
6 7 8 |
# File 'lib/merb-core/dispatch/session/store_container.rb', line 6 def _fingerprint @_fingerprint end |
Class Method Details
.generate ⇒ Object
Generates a new session ID and creates a new session.
Returns
- SessionStoreContainer
-
The new session.
53 54 55 56 57 |
# File 'lib/merb-core/dispatch/session/store_container.rb', line 53 def generate session = new(Merb::SessionMixin.rand_uuid) session. = true session end |
.setup(request) ⇒ Object
Setup a new session.
Parameters
- request<Merb::Request>
-
The Merb::Request that came in from Rack.
Returns
- SessionContainer
-
a SessionContainer. If no sessions were found,
a new SessionContainer will be generated.
67 68 69 70 71 72 73 |
# File 'lib/merb-core/dispatch/session/store_container.rb', line 67 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.
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/merb-core/dispatch/session/store_container.rb', line 124 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.message}") end end if || Merb::SessionMixin. request.(self.session_id) end end end |
#regenerate ⇒ Object
Regenerate the session ID.
143 144 145 146 147 |
# File 'lib/merb-core/dispatch/session/store_container.rb', line 143 def regenerate store.delete_session(self.session_id) self.session_id = Merb::SessionMixin.rand_uuid store.store_session(self.session_id, self) end |