logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

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

Authors

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

       Daisuke Maki

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.

Name

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

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.

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;
         };

See Also