NAME

Dancer::Session::DBI - DBI based session engine for Dancer

SYNOPSIS

This module implements a session engine by serializing the session into JSON, and storing it in a database via DBI

NOTE: This module is currently only compatible with MySQL. This will change in the future

JSON was chosen as the serialization format, because it is fast, terse, and portable.

In future versions the serialization method may be customizable, but for now JSON is the only choice. You should look into Plack::Session::Store::DBI if you have an immediate need to use a different serializer, and are in a position to use Plack

USAGE

In config.yml

session: "DBI"
session_options: 
    dsn:      "DBI:mysql:database=testing;host=127.0.0.1;port=3306" # DBI Data Source Name
    table:    "sessions"  # Name of the table to store sessions
    user:     "user"      # Username used to connect to the database
    password: "password"  # Password to connect to the database

Alternatively, you can pass an active DBH connection in your application

set 'session_options' => {
    dbh   => DBI->connect( 'DBI:mysql:database=testing;host=127.0.0.1;port=3306', 'user', 'password' ),
    table => 'session',
};

The following MySQL schema is the minimum requirement.

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

If using a MySQL Memory table, you must use a VARCHAR type for the session_data field, as that table type doesn't support TEXT

A timestamp field that updates when a session is updated is recommended, so you can expire sessions server-side as well as client-side. Something like this

`last_active` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

This session engine will not automagically remove expired sessions on the server, but with a timestamp field as above, you should be able to to do this.

METHODS

create()

Creates a new session. Returns the session object.

flush()

Write the session to the database. Returns the session object.

retrieve($id)

Look for a session with the given id.

Returns the session object if found, undef if not. Logs a warning if the session was found, but could not be deserialized.

destroy()

Remove the current session object from the database..

SEE ALSO

Dancer, Dancer::Session, Plack::Session::Store::DBI

AUTHOR

James Aitken <jaitken@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2012 by James Aitken.

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