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.

    Note that MySQL "TEXT" fields only store 64 kB, so if your session data
    will exceed that size you'll want to use "MEDIUMTEXT", "MEDIUMBLOB", or
    larger. If you configure your DBIx::Class::ResultSource to include the
    size of the column, you will receive warnings for this problem:

        This session requires 1180 bytes of storage, but your database
        column 'session_data' can only store 200 bytes. Storing this
        session may not be reliable; increase the size of your data field

    See "add_columns" in DBIx::Class::ResultSource for more information.

    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

    *   Jay Hannah, for tests and warning when session size exceeds
        DBIx::Class storage size.

COPYRIGHT
    Copyright 2006-2008 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.

