Catalyst::Plugin::Session::Store::DBIC.3pm

Langue: en

Version: 2006-09-16 (ubuntu - 08/07/09)

Section: 3 (Bibliothèques de fonctions)

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 <danieltwc@cpan.org>

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 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.