Class: Innate::Session

Inherits:
Object
  • Object
show all
Includes:
Optioned
Defined in:
lib/innate/session.rb,
lib/innate/session/flash.rb

Overview

Mostly ported from Ramaze, but behaves lazy, no session will be created if no session is used.

We keep session data in memory until #flush is called, at which point it will be persisted completely into the cache, no question asked.

You may store anything in here that you may also store in the corresponding store, usually it’s best to keep it to things that are safe to Marshal.

The Session instance is compatible with the specification of rack.session.

Since the Time class is used to create the cookie expiration timestamp, you will have to keep the ttl in a reasonable range. The maximum value that Time can store on a 32bit system is:

Time.at(2147483647) # => Tue Jan 19 12:14:07 +0900 2038

The default expiration time for cookies and the session cache was reduced to a default of 30 days. This was done to be compatible with the maximum ttl of MemCache. You may increase this value if you do not use MemCache to persist your sessions.

Defined Under Namespace

Classes: Flash

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Optioned

included

Constructor Details

#initialize(request, response) ⇒ Session

Returns a new instance of Session.



47
48
49
50
51
52
53
# File 'lib/innate/session.rb', line 47

def initialize(request, response)
  @request, @response = request, response
  @cookie_set = false
  @force_new_cookie = false
  @cache_sid = nil
  @flash = Flash.new(self)
end

Instance Attribute Details

Returns the value of attribute cookie_set.



45
46
47
# File 'lib/innate/session.rb', line 45

def cookie_set
  @cookie_set
end

#flashObject (readonly)

Returns the value of attribute flash.



45
46
47
# File 'lib/innate/session.rb', line 45

def flash
  @flash
end

#requestObject (readonly)

Returns the value of attribute request.



45
46
47
# File 'lib/innate/session.rb', line 45

def request
  @request
end

#responseObject (readonly)

Returns the value of attribute response.



45
46
47
# File 'lib/innate/session.rb', line 45

def response
  @response
end

Instance Method Details

#clearObject



71
72
73
74
# File 'lib/innate/session.rb', line 71

def clear
  cache.delete(sid)
  @cache_sid = nil
end

#delete(key) ⇒ Object



67
68
69
# File 'lib/innate/session.rb', line 67

def delete(key)
  cache_sid.delete(key)
end

#fetch(key, value = nil) ⇒ Object Also known as: []



62
63
64
# File 'lib/innate/session.rb', line 62

def fetch(key, value = nil)
  cache_sid[key]
end

#flush(response = @response) ⇒ Object

Additional interface



78
79
80
81
82
83
84
# File 'lib/innate/session.rb', line 78

def flush(response = @response)
  return if !@cache_sid or @cache_sid.empty?

  flash.rotate!
  cache.store(sid, cache_sid, :ttl => options.ttl)
  set_cookie(response)
end

#resid!Object



90
91
92
93
94
95
# File 'lib/innate/session.rb', line 90

def resid!
  cache_sid
  cache.delete(sid)
  @sid = generate_sid
  @force_new_cookie = true
end

#sidObject



86
87
88
# File 'lib/innate/session.rb', line 86

def sid
  @sid ||= cookie || generate_sid
end

#store(key, value) ⇒ Object Also known as: []=

Rack interface



57
58
59
# File 'lib/innate/session.rb', line 57

def store(key, value)
  cache_sid[key] = value
end