Class: CGI::Session::ActiveRecordStore
- Defined in:
- lib/action_controller/session/active_record_store.rb
Overview
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 may be used as the backing store.
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). Session data is marshaled to data
. session_id
should be indexed for speedy lookups.
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, whether a feature-packed Active Record or a bare-metal high-performance SQL store, by setting
+CGI::Session::ActiveRecordStore.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 fast SqlBypass class is a generic SQL session store. You may use it as a basis for high-performance database-specific stores.
If the data you are attempting to write to the data
column is larger than the column’s size limit, ActionController::SessionOverflowError will be raised.
Defined Under Namespace
Constant Summary collapse
- @@session_class =
Session
Instance Method Summary collapse
-
#close ⇒ Object
Save and close the session store.
-
#delete ⇒ Object
Delete and close the session store.
-
#initialize(session, option = nil) ⇒ ActiveRecordStore
constructor
Find or instantiate a session given a CGI::Session.
-
#restore ⇒ Object
Restore session state.
-
#update ⇒ Object
Save session store.
Constructor Details
#initialize(session, option = nil) ⇒ ActiveRecordStore
Find or instantiate a session given a CGI::Session.
270 271 272 273 274 275 276 277 278 |
# File 'lib/action_controller/session/active_record_store.rb', line 270 def initialize(session, option = nil) session_id = session.session_id unless @session = ActiveRecord::Base.silence { @@session_class.find_by_session_id(session_id) } unless session.new_session raise CGI::Session::NoSession, 'uninitialized session' end @session = @@session_class.new(:session_id => session_id, :data => {}) end end |
Instance Method Details
#close ⇒ Object
Save and close the session store.
295 296 297 298 299 300 |
# File 'lib/action_controller/session/active_record_store.rb', line 295 def close if @session update @session = nil end end |
#delete ⇒ Object
Delete and close the session store.
303 304 305 306 307 308 |
# File 'lib/action_controller/session/active_record_store.rb', line 303 def delete if @session ActiveRecord::Base.silence { @session.destroy } @session = nil end end |
#restore ⇒ Object
Restore session state. The session model handles unmarshaling.
281 282 283 284 285 |
# File 'lib/action_controller/session/active_record_store.rb', line 281 def restore if @session @session.data end end |
#update ⇒ Object
Save session store.
288 289 290 291 292 |
# File 'lib/action_controller/session/active_record_store.rb', line 288 def update if @session ActiveRecord::Base.silence { @session.save } end end |