Sha256: c51315b3d18e335144f73db3ca461e72627d1e14d2db44fc860321a6e27e115e

Contents?: true

Size: 1.67 KB

Versions: 95

Compression:

Stored size: 1.67 KB

Contents

# frozen_string_literal: true

require "action_dispatch/middleware/session/abstract_store"

module ActionDispatch
  module Session
    # A session store that uses an ActiveSupport::Cache::Store to store the sessions. This store is most useful
    # if you don't store critical data in your sessions and you don't need them to live for extended periods
    # of time.
    #
    # ==== Options
    # * <tt>cache</tt>         - The cache to use. If it is not specified, <tt>Rails.cache</tt> will be used.
    # * <tt>expire_after</tt>  - The length of time a session will be stored before automatically expiring.
    #   By default, the <tt>:expires_in</tt> option of the cache is used.
    class CacheStore < AbstractStore
      def initialize(app, options = {})
        @cache = options[:cache] || Rails.cache
        options[:expire_after] ||= @cache.options[:expires_in]
        super
      end

      # Get a session from the cache.
      def find_session(env, sid)
        unless sid && (session = @cache.read(cache_key(sid)))
          sid, session = generate_sid, {}
        end
        [sid, session]
      end

      # Set a session in the cache.
      def write_session(env, sid, session, options)
        key = cache_key(sid)
        if session
          @cache.write(key, session, expires_in: options[:expire_after])
        else
          @cache.delete(key)
        end
        sid
      end

      # Remove a session from the cache.
      def delete_session(env, sid, options)
        @cache.delete(cache_key(sid))
        generate_sid
      end

      private
        # Turn the session id into a cache key.
        def cache_key(sid)
          "_session_id:#{sid}"
        end
    end
  end
end

Version data entries

95 entries across 87 versions & 5 rubygems

Version Path
actionpack-6.0.2 lib/action_dispatch/middleware/session/cache_store.rb
actionpack-6.0.2.rc2 lib/action_dispatch/middleware/session/cache_store.rb
zuora_connect_ui-0.10.0 vendor/ruby/2.6.0/gems/actionpack-6.0.0/lib/action_dispatch/middleware/session/cache_store.rb
zuora_connect_ui-0.10.0 vendor/ruby/2.6.0/gems/actionpack-5.2.3/lib/action_dispatch/middleware/session/cache_store.rb
zuora_connect_ui-0.10.0 vendor/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/session/cache_store.rb
actionpack-5.2.4 lib/action_dispatch/middleware/session/cache_store.rb
actionpack-6.0.2.rc1 lib/action_dispatch/middleware/session/cache_store.rb
actionpack-5.2.4.rc1 lib/action_dispatch/middleware/session/cache_store.rb
zuora_connect_ui-0.9.2 vendor/ruby/2.6.0/gems/actionpack-6.0.0/lib/action_dispatch/middleware/session/cache_store.rb
zuora_connect_ui-0.9.2 vendor/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/session/cache_store.rb
zuora_connect_ui-0.9.2 vendor/ruby/2.6.0/gems/actionpack-5.2.3/lib/action_dispatch/middleware/session/cache_store.rb
actionpack-6.0.1 lib/action_dispatch/middleware/session/cache_store.rb
chatops-rpc-0.0.2 fixtures/chatops-controller-example/vendor/bundle/ruby/2.5.0/gems/actionpack-6.0.0/lib/action_dispatch/middleware/session/cache_store.rb
actionpack-6.0.1.rc1 lib/action_dispatch/middleware/session/cache_store.rb
chatops-rpc-0.0.1 fixtures/chatops-controller-example/vendor/bundle/ruby/2.5.0/gems/actionpack-6.0.0/lib/action_dispatch/middleware/session/cache_store.rb
zuora_connect_ui-0.9.1 vendor/ruby/2.6.0/gems/actionpack-6.0.0/lib/action_dispatch/middleware/session/cache_store.rb
zuora_connect_ui-0.9.1 vendor/ruby/2.6.0/gems/actionpack-5.2.3/lib/action_dispatch/middleware/session/cache_store.rb
zuora_connect_ui-0.9.0 vendor/ruby/2.6.0/gems/actionpack-6.0.0/lib/action_dispatch/middleware/session/cache_store.rb
zuora_connect_ui-0.9.0 vendor/ruby/2.6.0/gems/actionpack-5.2.3/lib/action_dispatch/middleware/session/cache_store.rb
zuora_connect_ui-0.8.3 vendor/ruby/2.6.0/gems/actionpack-6.0.0/lib/action_dispatch/middleware/session/cache_store.rb