NAME Catalyst::Plugin::Session::Store::DBIC - Store your sessions via DBIx::Class SYNOPSIS # Create a table in your database for sessions CREATE TABLE sessions ( id CHAR(72) PRIMARY KEY, session_data TEXT, expires INTEGER ); # Create the corresponding table class package MyApp::Schema::Session; use base qw/DBIx::Class/; __PACKAGE__->load_components(qw/Core/); __PACKAGE__->table('sessions'); __PACKAGE__->add_columns(qw/id session_data expires/); __PACKAGE__->set_primary_key('id'); 1; # In your application use Catalyst qw/Session Session::Store::DBIC Session::State::Cookie/; __PACKAGE__->config( # ... other items ... session => { dbic_class => 'DBIC::Session', # Assuming MyApp::Model::DBIC expires => 3600, }, ); # Later, in a controller action $c->session->{foo} = 'bar'; DESCRIPTION This Catalyst::Plugin::Session storage module saves session data in your database via DBIx::Class. It's actually just a wrapper around Catalyst::Plugin::Session::Store::Delegate; if you need complete control over how your sessions are stored, you probably want to use that instead. METHODS setup_finished Hook into the configured session class. session_store_dbic_class Return the DBIx::Class class name to be passed to "$c->model". Defaults to "DBIC::Session". session_store_dbic_id_field Return the configured ID field name. Defaults to "id". session_store_dbic_data_field Return the configured data field name. Defaults to "session_data". session_store_dbic_expires_field Return the configured expires field name. Defaults to "expires". session_store_model Return the model used to find a session. get_session_store_delegate Load the row corresponding to the specified session ID. If none is found, one is automatically created. session_store_delegate_key_to_accessor Match the specified key and operation to the session ID and field name. delete_session_data Delete the specified session from the backend store. delete_expired_sessions Delete all expired sessions. CONFIGURATION The following parameters should be placed in your application configuration under the "session" key. dbic_class (Required) The name of the DBIx::Class that represents a session in the database. It is recommended that you provide only the part after "MyApp::Model", e.g. "DBIC::Session". If you are using Catalyst::Model::DBIC::Schema, the following layout is recommended: * "MyApp::Schema" - your DBIx::Class::Schema class * "MyApp::Schema::Session" - your session table class * "MyApp::Model::DBIC" - your Catalyst::Model::DBIC::Schema class This module will then use "$c->model" to access the appropriate result source from the composed schema matching the "dbic_class" name. For more information, please see Catalyst::Model::DBIC::Schema. expires Number of seconds for which sessions are active. Note that no automatic cleanup is done on your session data. To delete expired sessions, you can use the "delete_expired_sessions" method with Catalyst::Plugin::Scheduler. id_field The name of the field on your sessions table which stores the session ID. Defaults to "id". data_field The name of the field on your sessions table which stores session data. Defaults to "session_data" for compatibility with Catalyst::Plugin::Session::Store::DBI. expires_field The name of the field on your sessions table which stores the expiration time of the session. Defaults to "expires". SCHEMA Your sessions table should contain the following columns: id CHAR(72) PRIMARY KEY session_data TEXT expires INTEGER The "id" column should probably be 72 characters. It needs to handle the longest string that can be returned by "generate_session_id" in Catalyst::Plugin::Session, plus another eight characters for internal use. This is less than 72 characters when SHA-1 or MD5 is used, but SHA-256 will need all 72 characters. The "session_data" column should be a long text field. Session data is encoded using MIME::Base64 before being stored in the database. The "expires" column stores the future expiration time of the session. This may be null for per-user and flash sessions. Note that you can change the column names using the "id_field", "data_field", and "expires_field" configuration parameters. However, the column types must match the above. AUTHOR Daniel Westermann-Clark ACKNOWLEDGMENTS * Andy Grundman, for Catalyst::Plugin::Session::Store::DBI * David Kamholz, for most of the testing code (from Catalyst::Plugin::Authentication::Store::DBIC) * Yuval Kogman, for assistance in converting to Catalyst::Plugin::Session::Store::Delegate COPYRIGHT Copyright 2006 Daniel Westermann-Clark, all rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.