class ActionDispatch::Session::YiiRedisStore

Public Class Methods

new(app, options = {}) click to toggle source
Calls superclass method
# File lib/action_dispatch/middleware/session/yii_redis_store.rb, line 7
def initialize(app, options = {})
  options = options.dup
  options = normalize_server_options(options)
  options[:redis_server] ||= options[:servers]
  super
end

Public Instance Methods

get_session(env, sid) click to toggle source
# File lib/action_dispatch/middleware/session/yii_redis_store.rb, line 27
def get_session(env, sid)
  if env["rack.session.options"][:skip]
    [generate_sid, {}]
  else
    with_lock(env, [nil, {}]) do
      unless sid && (session = with { |c| c.get(yii_session_id(sid)) })
        session = {}
        sid = generate_unique_sid(session)
      end
      [sid, session]
    end
  end
end
normalize_server_options(options) click to toggle source
# File lib/action_dispatch/middleware/session/yii_redis_store.rb, line 14
def normalize_server_options(options)
  if options[:servers].any?
    options[:servers].map { |server| server[:serializer] ||= ::YiiRedisStore::PhpSerializer }
  end
  options
end
set_session(env, session_id, new_session, options) click to toggle source
# File lib/action_dispatch/middleware/session/yii_redis_store.rb, line 41
def set_session(env, session_id, new_session, options)
  with_lock(env, false) do
    with { |c| c.set yii_session_id(session_id), new_session, options }
    session_id
  end
end
yii_session_id(sid) click to toggle source

yii tranform the session_id using custom rule

# File lib/action_dispatch/middleware/session/yii_redis_store.rb, line 22
def yii_session_id(sid)
  Digest::MD5.hexdigest(::YiiRedisStore.session_digest).first(5) +
    Digest::MD5.hexdigest(['yii\redis\Session', sid].to_json)
end