Class: Merb::MemCacheSession

Sessions stored in memcached.

Requires setup in your +merb_init.rb+:

  require 'memcache'
  CACHE = MemCache.new('127.0.0.1:11211', { :namespace => 'my_app' })

And a setting in +merb.yml+:

  :session_store: mem_cache

Attributes

NameRead/write?
data RW
needs_new_cookie RW
session_id RW

Public Class Methods


generate ()

Generates a new session ID and creates a row for the new session in the database.

    # File lib/merb/session/mem_cache_session.rb, line 53
53:       def generate
54:         sid = Merb::SessionMixin::rand_uuid
55:         new(sid)
56:       end

new (session_id)

    # File lib/merb/session/mem_cache_session.rb, line 46
46:     def initialize(session_id)
47:       @session_id = session_id
48:       @data = {}
49:     end

persist (session_id)

Gets the existing session based on the session_id available in cookies. If none is found, generates a new session.

    # File lib/merb/session/mem_cache_session.rb, line 60
60:       def persist(session_id)
61:         unless session_id.blank?
62:           session = ::Cache.get("session:#{session_id}")
63:           if session.nil?
64:             # Not in memcached, but assume that cookie exists
65:             session = new(session_id)
66:           end
67:         else
68:           # No cookie...make a new session_id
69:           session = generate
70:         end
71:         if session.is_a?(MemCacheSession)
72:           [session, session.session_id]
73:         else
74:           # recreate using the rails session as the data
75:           session_object = MemCacheSession.new(session_id)
76:           session_object.data = session
77:           [session_object, session_object.session_id]
78:         end
79: 
80:       end

Public Instance Methods


[] (k)

     # File lib/merb/session/mem_cache_session.rb, line 116
116:     def [](k) 
117:       @data[k] 
118:     end

[]= (k, v)

assigns a key value pair

     # File lib/merb/session/mem_cache_session.rb, line 112
112:     def []=(k, v) 
113:       @data[k] = v
114:     end

delete ()

Lazy-delete of session data

     # File lib/merb/session/mem_cache_session.rb, line 102
102:         def delete  
103:           @data = {} 
104:         end

each (&b)

     # File lib/merb/session/mem_cache_session.rb, line 120
120:     def each(&b) 
121:       @data.each(&b) 
122:     end

loaded? ()

Has the session been loaded yet?

     # File lib/merb/session/mem_cache_session.rb, line 107
107:     def loaded?
108:       !! @data
109:     end

refresh_expiration ()

Recreates the cookie with the default expiration time Useful during log in for pushing back the expiration date

    # File lib/merb/session/mem_cache_session.rb, line 97
97:         def refresh_expiration 
98:           self.needs_new_cookie=true 
99:         end

regenerate ()

Regenerate the Session ID

    # File lib/merb/session/mem_cache_session.rb, line 90
90:         def regenerate 
91:           @session_id = Merb::SessionMixin::rand_uuid 
92:           self.needs_new_cookie=true 
93:         end