Class: ActionDispatch::Session::RedisSessionStorage

Inherits:
AbstractStore
  • Object
show all
Defined in:
lib/redis_session_storage.rb

Defined Under Namespace

Classes: JsonSerializer

Instance Method Summary collapse

Constructor Details

#initialize(app, options = {}) ⇒ RedisSessionStorage

Returns a new instance of RedisSessionStorage.



6
7
8
9
10
11
12
13
14
# File 'lib/redis_session_storage.rb', line 6

def initialize(app, options = {})
  host = options[:host] || '127.0.0.1'
  port = options[:port] || 6379
  db = options[:db] || 0
  @prefix = options[:key] || ""
  @serializer = determine_serializer(options[:serializer])
  @redis = Redis.new(:host => host, :port => port, :db => db)
  return super
end

Instance Method Details

#destroy_session(env, session_id, options) ⇒ Object



41
42
43
44
# File 'lib/redis_session_storage.rb', line 41

def destroy_session(env, session_id, options)
      @redis.del(prefixed_key(session_id))
  return generate_sid()
end

#determine_serializer(serializer) ⇒ Object



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

def determine_serializer(serializer)
  if serializer == :json
    serial = JsonSerializer
  else
    serial = Marshal
  end
  return serial
end

#get_session(env, session_id) ⇒ Object



16
17
18
19
20
# File 'lib/redis_session_storage.rb', line 16

def get_session(env, session_id)
  session_id ||= generate_sid()
  session_data = get_redis_session(prefixed_key(session_id)) || {}
  return [session_id, session_data]
end

#set_session(env, session_id, session_data, options) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/redis_session_storage.rb', line 22

def set_session(env, session_id, session_data, options)
      begin
        key = prefixed_key(session_id)
   if session_data
     if(options[:expire_after])
      @redis.setex(key, options[:expire_after], @serializer.dump(session_data))
     else
       @redis.set(key, @serializer.dump(session_data))
     end
   else
     @redis.del(key)
   end
   return session_id
       rescue => e
Rails.logger.error("SessionDispatch::RedisSession - Unable to set redis session.")
return false
       end
end