Class: Rack::Session::Abstract::ID

Inherits:
Object
  • Object
show all
Defined in:
lib/rack/session/abstract/id.rb

Overview

ID sets up a basic framework for implementing an id based sessioning service. Cookies sent to the client for maintaining sessions will only contain an id reference. Only #get_session and #set_session are required to be overwritten.

All parameters are optional.

  • :key determines the name of the cookie, by default it is ‘rack.session’

  • :path, :domain, :expire_after, :secure, and :httponly set the related cookie options as by Rack::Response#add_cookie

  • :skip will not a set a cookie in the response nor update the session state

  • :defer will not set a cookie in the response but still update the session state if it is used with a backend

  • :renew (implementation dependent) will prompt the generation of a new session id, and migration of data to be referenced at the new id. If :defer is set, it will be overridden and the cookie will be set.

  • :sidbits sets the number of bits in length that a generated session id will be.

These options can be set on a per request basis, at the location of env. Additionally the id of the session can be found within the options hash at the key :id. It is highly not recommended to change its value.

Is Rack::Utils::Context compatible.

Not included by default; you must require ‘rack/session/abstract/id’ to use.

Direct Known Subclasses

Cookie, Memcache, Pool

Constant Summary collapse

DEFAULT_OPTIONS =
{
  :key =>           'rack.session',
  :path =>          '/',
  :domain =>        nil,
  :expire_after =>  nil,
  :secure =>        false,
  :httponly =>      true,
  :defer =>         false,
  :renew =>         false,
  :sidbits =>       128,
  :cookie_only =>   true,
  :secure_random => (::SecureRandom rescue false)
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

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

Returns a new instance of ID.



211
212
213
214
215
216
217
# File 'lib/rack/session/abstract/id.rb', line 211

def initialize(app, options={})
  @app = app
  @default_options = self.class::DEFAULT_OPTIONS.merge(options)
  @key = @default_options.delete(:key)
  @cookie_only = @default_options.delete(:cookie_only)
  initialize_sid
end

Instance Attribute Details

#default_optionsObject (readonly)

Returns the value of attribute default_options.



209
210
211
# File 'lib/rack/session/abstract/id.rb', line 209

def default_options
  @default_options
end

#keyObject (readonly)

Returns the value of attribute key.



209
210
211
# File 'lib/rack/session/abstract/id.rb', line 209

def key
  @key
end

Instance Method Details

#call(env) ⇒ Object



219
220
221
# File 'lib/rack/session/abstract/id.rb', line 219

def call(env)
  context(env)
end

#context(env, app = @app) ⇒ Object



223
224
225
226
227
# File 'lib/rack/session/abstract/id.rb', line 223

def context(env, app=@app)
  prepare_session(env)
  status, headers, body = app.call(env)
  commit_session(env, status, headers, body)
end