---
name: "Catalyst::Plugin::Session::Store::DBIC"
section: "3pm"
platform: "linux"
package: "libcatalyst-plugin-session-store-dbic-perl"
version: "0.14-4"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Catalyst::Plugin::Session::Store::DBIC"
---

# Catalyst::Plugin::Session::Store::DBIC(3pm)

Store your sessions via DBIx::Class

## 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 ...
        'Plugin::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 `"Plugin::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 (c) 2006 - 2009 the Catalyst::Plugin::Session::Store::DBIC "AUTHOR" as listed above.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
