Class: Merb::MemorySessionStore
- Defined in:
- lib/merb-core/dispatch/session/memory.rb
Overview
Used for handling multiple sessions stored in memory.
Instance Method Summary collapse
-
#delete_session(session_id) ⇒ Object
Parameters session_id<String>:: ID of the session to delete.
-
#initialize(ttl = nil) ⇒ MemorySessionStore
constructor
Parameters ttl<Fixnum>:: Session validity time in seconds.
-
#reap_expired_sessions ⇒ Object
Deletes any sessions that have reached their maximum validity.
-
#retrieve_session(session_id) ⇒ Object
Parameters session_id<String>:: ID of the session to retrieve.
-
#start_timer ⇒ Object
Starts the timer that will eventually reap outdated sessions.
-
#store_session(session_id, data) ⇒ Object
Parameters session_id<String>:: ID of the session to set.
Constructor Details
#initialize(ttl = nil) ⇒ MemorySessionStore
Parameters
- ttl<Fixnum>
-
Session validity time in seconds. Defaults to 1 hour.
:api: private
44 45 46 47 48 49 50 |
# File 'lib/merb-core/dispatch/session/memory.rb', line 44 def initialize(ttl=nil) @sessions = Hash.new @timestamps = Hash.new @mutex = Mutex.new @session_ttl = ttl || Merb::Const::HOUR # defaults 1 hour start_timer end |
Instance Method Details
#delete_session(session_id) ⇒ Object
Parameters
- session_id<String>
-
ID of the session to delete.
:api: private
82 83 84 85 86 87 |
# File 'lib/merb-core/dispatch/session/memory.rb', line 82 def delete_session(session_id) @mutex.synchronize { @timestamps.delete(session_id) @sessions.delete(session_id) } end |
#reap_expired_sessions ⇒ Object
Deletes any sessions that have reached their maximum validity.
:api: private
92 93 94 95 96 97 |
# File 'lib/merb-core/dispatch/session/memory.rb', line 92 def reap_expired_sessions @timestamps.each do |session_id,stamp| delete_session(session_id) if (stamp + @session_ttl) < Time.now end GC.start end |
#retrieve_session(session_id) ⇒ Object
Parameters
- session_id<String>
-
ID of the session to retrieve.
Returns
- ContainerSession
-
The session corresponding to the ID.
:api: private
59 60 61 62 63 64 |
# File 'lib/merb-core/dispatch/session/memory.rb', line 59 def retrieve_session(session_id) @mutex.synchronize { @timestamps[session_id] = Time.now @sessions[session_id] } end |
#start_timer ⇒ Object
Starts the timer that will eventually reap outdated sessions.
:api: private
102 103 104 105 106 107 108 109 |
# File 'lib/merb-core/dispatch/session/memory.rb', line 102 def start_timer Thread.new do loop { sleep @session_ttl reap_expired_sessions } end end |
#store_session(session_id, data) ⇒ Object
Parameters
- session_id<String>
-
ID of the session to set.
- data<ContainerSession>
-
The session to set.
:api: private
71 72 73 74 75 76 |
# File 'lib/merb-core/dispatch/session/memory.rb', line 71 def store_session(session_id, data) @mutex.synchronize { @timestamps[session_id] = Time.now @sessions[session_id] = data } end |