Sha256: d94042b9402bab87960f5747c347b9ae3d1441999f4949be14554389b21be841

Contents?: true

Size: 1.92 KB

Versions: 7

Compression:

Stored size: 1.92 KB

Contents

module ActionController
  module Session
# Redis session storage for Rails, and for Rails only. Derived from
# the MemCacheStore code, simply dropping in Redis instead.
#
# Options:
#  :key     => Same as with the other cookie stores, key name
#  :secret  => Encryption secret for the key
#  :host    => Redis host name, default is localhost
#  :port    => Redis port, default is 6379
#  :db      => Database number, defaults to 0. Useful to separate your session storage from other data
#  :key_prefix  => Prefix for keys used in Redis, e.g. myapp-. Useful to separate session storage keys visibly from others
#  :expire_after => A number in seconds to set the timeout interval for the session. Will map directly to expiry in Redis

    class RedisSessionStore < ActionController::Session::AbstractStore

      def initialize(app, options = {})
        # Support old :expires option
        options[:expire_after] ||= options[:expires]

        super

        @options = { :key_prefix => "" }.update(options)
        servers = [options[:servers]].flatten.compact.map do |server_options|
          {
            :namespace => 'rack:session',
            :host => 'localhost',
            :port => '6379',
            :db => 0
          }.update(RedisFactory.convert_to_redis_client_options(server_options))
        end

        @pool = RedisFactory.create(*servers)
      end

      private
      def prefixed(sid)
        "#{@options[:key_prefix]}#{sid}"
      end

      def get_session(env, sid)
        sid ||= generate_sid
        begin
          session = @pool.marshalled_get(prefixed(sid)) || {}
        rescue Errno::ECONNREFUSED
          session = {}
        end
        [sid, session]
      end

      def set_session(env, sid, session_data)
        options = env['rack.session.options']
        @pool.marshalled_set(prefixed(sid), session_data, options)
        return true
      rescue Errno::ECONNREFUSED
        return false
      end

    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
honkster-redis-store-0.3.16 lib/rack/session/rails.rb
honkster-redis-store-0.3.15 lib/rack/session/rails.rb
honkster-redis-store-0.3.14 lib/rack/session/rails.rb
honkster-redis-store-0.3.13 lib/rack/session/rails.rb
honkster-redis-store-0.3.12 lib/rack/session/rails.rb
honkster-redis-store-0.3.11 lib/rack/session/rails.rb
honkster-redis-store-0.3.10 lib/cache/rails/redis_session_store.rb