---
name: "Plack::Session::Store::DBI"
section: "3pm"
platform: "linux"
package: "libplack-middleware-session-perl"
version: "0.34-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Plack::Session::Store::DBI"
---

# Plack::Session::Store::DBI(3pm)

DBI-based session store

## NAME

Plack::Session::Store::DBI - DBI-based session store

## SYNOPSIS

```
  use Plack::Builder;
  use Plack::Middleware::Session;
  use Plack::Session::Store::DBI;
  my $app = sub {
      return [ 200, [ 'Content-Type' => 'text/plain' ], [ 'Hello Foo' ] ];
  };
  builder {
      enable 'Session',
          store => Plack::Session::Store::DBI->new(
              dbh => DBI->connect( @connect_args )
          );
      $app;
  };
  # set get_dbh callback for ondemand
  builder {
      enable 'Session',
          store => Plack::Session::Store::DBI->new(
              get_dbh => sub { DBI->connect( @connect_args ) }
          );
      $app;
  };

  # with custom serializer/deserializer
  builder {
      enable 'Session',
          store => Plack::Session::Store::DBI->new(
              dbh => DBI->connect( @connect_args )
              # YAML takes its args in the opposite order
              serializer   => sub { YAML::DumpFile( reverse @_ ) },
              deserializer => sub { YAML::LoadFile( @_ ) },
          );
      $app;
  };
  # use custom session table name
  builder {
      enable 'Session',
          store => Plack::Session::Store::DBI->new(
              dbh        => DBI->connect( @connect_args ),
              table_name => 'my_session_table',
          );
      $app;
  };
```

## DESCRIPTION

This implements a DBI based storage for session data. By default it will use Storable and MIME::Base64 to serialize and  deserialize the data, but this can be configured easily.

This is a subclass of Plack::Session::Store and implements its full interface.

## SESSION TABLE SCHEMA

Your session table must have at least the following schema structure:

```
    CREATE TABLE sessions (
        id           CHAR(72) PRIMARY KEY,
        session_data TEXT
    );
```

Note that MySQL TEXT fields only store 64KB, so if your session data will exceed that size you'll want to move to MEDIUMTEXT, MEDIUMBLOB, or larger.

## AUTHORS

Many aspects of this module were partially based upon Catalyst::Plugin::Session::Store::DBI

Daisuke Maki

## COPYRIGHT AND LICENSE

Copyright 2009, 2010 Daisuke Maki `"<daisuke@endeworks.jp>"`

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