Class | ActiveRecord::SessionStore
In: | lib/active_record/session_store.rb
Parent: | ActionController::Session::AbstractStore

A session store backed by an Active Record class. A default class is provided, but any object duck-typing to an Active Record Session class with text `session_id` and `data` attributes is sufficient.

The default assumes a `sessions` tables with columns:

      +id+ (numeric primary key),
      +session_id+ (text, or longtext if your session data exceeds 65K), and
      +data+ (text or longtext; careful if your session data exceeds 65KB).

The `session_id` column should always be indexed for speedy lookups. Session data is marshaled to the `data` column in Base64 format. If the data you write is larger than the column‘s size limit, ActionController::SessionOverflowError will be raised.

You may configure the table name, primary key, and data column. For example, at the end of `config/environment.rb`:

      ActiveRecord::SessionStore::Session.table_name = 'legacy_session_table'
      ActiveRecord::SessionStore::Session.primary_key = 'session_id'
      ActiveRecord::SessionStore::Session.data_column_name = 'legacy_session_data'

Note that setting the primary key to the `session_id` frees you from having a separate `id` column if you don‘t want it. However, you must set `session.model.id = session.session_id` by hand! A before filter on ApplicationController is a good place.

Since the default class is a simple Active Record, you get timestamps for free if you add `created_at` and `updated_at` datetime columns to the `sessions` table, making periodic session expiration a snap.

You may provide your own session class implementation, whether a feature-packed Active Record or a bare-metal high-performance SQL store, by setting

      ActiveRecord::SessionStore.session_class = MySessionClass

You must implement these methods:

      self.find_by_session_id(session_id)
      initialize(hash_of_session_id_and_data)
      attr_reader :session_id
      attr_accessor :data
      save
      destroy

The example SqlBypass class is a generic SQL session store. You may use it as a basis for high-performance database-specific stores.

### Classes and Modules

Class ActiveRecord::SessionStore::Session
Class ActiveRecord::SessionStore::SqlBypass

### Constants

SESSION_RECORD_KEY | = | 'rack.session.record'.freeze

[Validate]