Harbor::Contrib::Session::Redis
This class provides Redis backed in-memory session support. You can use it instead of the builtin Harbor::Session::Cookie by doing:
Harbor::Session.configure do |session|
session[:store] = Harbor::Contrib::Session::Redis
end
TODO: Currently there is no support for configuring non-default options for the
redis connection. So this is not appropriate for production use at this point (unless you’re running everything from a single server I guess).
Public Class Methods
commit_session(data, request)
This is part of the Session Store API
# File lib/harbor/contrib/session/redis.rb, line 50 50: def self.commit_session(data, request) 51: session_id = data[:session_id] 52: data[:updated_at] = Time::now 53: redis.set(session_id, dump(data)) 54: redis.expire(session_id, expire_after) 55: session_id 56: end
load_session(delegate, session_id, request = nil)
This is part of the Session Store API
# File lib/harbor/contrib/session/redis.rb, line 31 31: def self.load_session(delegate, session_id, request = nil) 32: if session_id.blank? || !(data = redis.get(session_id)) 33: session_id = generate_uuid 34: data = { :session_id => session_id, :updated_at => Time::now, :client_name => client_name } 35: redis.set(session_id, dump(data)) 36: redis.expire(session_id, expire_after) 37: 38: remote_ip = request ? request.remote_ip : nil 39: user_agent_raw = request ? request.env["HTTP_USER_AGENT"] : nil 40: 41: delegate.session_created(session_id, remote_ip, user_agent_raw) 42: 43: data 44: else 45: load(data) 46: end 47: end
Private Class Methods
client_name()
# File lib/harbor/contrib/session/redis.rb, line 79 79: def self.client_name 80: @client_name ||= begin 81: if name = Harbor::Session.options[:name] 82: name 83: else 84: raise ArgumentError.new("You must provide a :name to Harbor::Session::options!") 85: end 86: end 87: end
dump(data)
# File lib/harbor/contrib/session/redis.rb, line 103 103: def self.dump(data) 104: YAML::dump data 105: end
expire_after()
# File lib/harbor/contrib/session/redis.rb, line 60 60: def self.expire_after 61: @expire_after ||= (Harbor::Session.options[:expire_after] || 3600) 62: end
generate_uuid()
# File lib/harbor/contrib/session/redis.rb, line 72 72: def self.generate_uuid 73: @uuid_generator ||= UUID.new 74: @uuid_generator.generate.freeze 75: end
generate_uuid()
# File lib/harbor/contrib/session/redis.rb, line 66 66: def self.generate_uuid 67: java.util.UUID.randomUUID.to_s.freeze 68: end
load(data)
# File lib/harbor/contrib/session/redis.rb, line 107 107: def self.load(data) 108: YAML::load data 109: end
redis()
# File lib/harbor/contrib/session/redis.rb, line 89 89: def self.redis 90: @redis ||= if sock = Harbor::Session.options[:sock] 91: ::Redis::Directory.new(:path => sock).get("sessions", client_name) 92: else 93: host = Harbor::Session.options[:host] || "localhost" 94: port = Harbor::Session.options[:port] || 6379 95: ::Redis::Directory.new(:host => host, :port => port).get("sessions", client_name) 96: end 97: end