NAME

Dancer2::Session::DBIC - DBIx::Class session engine for Dancer2

VERSION

0.120

DESCRIPTION

This module implements a session engine for Dancer2 by serializing the session, and storing it in a database via DBIx::Class.

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

SYNOPSIS

Example configuration:

session: "DBIC"
engines:
  session:
    DBIC:
      dsn:      "DBI:mysql:database=testing;host=127.0.0.1;port=3306" # DBI Data Source Name
      schema_class:    "Interchange6::Schema"  # DBIx::Class schema
      user:     "user"      # Username used to connect to the database
      password: "password"  # Password to connect to the database
      resultset: "MySession" # DBIx::Class resultset, defaults to Session
      id_column: "my_session_id" # defaults to sessions_id
      data_column: "my_session_data" # defaults to session_data
      serializer: "YAML"    # defaults to JSON

Or if you are already using Dancer2::Plugin::DBIC and want to use its existing configuration for a database section named 'default' with all else set to default in this module then you could simply use:

session: "DBIC"
engines:
  session:
    DBIC:
      db_connection_name: default

SESSION EXPIRATION

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

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 manually.

ATTRIBUTES

schema_class

DBIx::Class schema class, e.g. Interchange6::Schema.

db_connection_name

The Dancer2::Plugin::DBIC database connection name.

If this option is provided then "schema_class", "dsn", "user" and "password" are all ignored.

resultset

DBIx::Class resultset, defaults to Session.

id_column

Column for session id, defaults to sessions_id.

If this column is not the primary key of the table, it should have a unique constraint added to it. See "add_unique_constraint" in DBIx::Class::ResultSource.

data_column

Column for session data, defaults to session_data.

dsn

DBI dsn to connect to the database.

user

Database username.

password

Database password.

schema

DBIx::Class schema.

serializer

Serializer to use, defaults to JSON.

Dancer2::Session::DBIC provides the following serializer classes:

JSON - Dancer2::Session::DBIC::Serializer::JSON
Sereal - Dancer2::Session::DBIC::Serializer::Sereal
YAML - Dancer2::Session::DBIC::Serializer::YAML

If you do not use the default JSON serializer then you might need to install additional modules - see the specific serializer class for details.

You can also use your own serializer class by passing the fully-qualified class name as argument to this option, e.g.: MyApp::Session::Serializer

serializer_object

Vivified "serializer" object.

serialize_options

Options to be passed to the constructor of the serializer class as a hash reference.

deserialize_options

Options to be passed to the constructor of the deserializer class as a hash reference.

METHODS

_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. Dies if the session was found, but could not be deserialized.

_change_id( $old_id, $new_id )

Change ID of session with $old_id to <$new_id>.

_destroy()

Remove the current session object from the database.

SEE ALSO

Dancer2, Dancer2::Session

AUTHOR

Stefan Hornburg (Racke) <racke@linuxia.de>

ACKNOWLEDGEMENTS

Based on code from Dancer::Session::DBI written by James Aitken and code from Dancer::Plugin::DBIC written by Naveed Massjouni.

Peter Mottram, support for JSON, YAML, Sereal and custom serializers, GH #8, #9, #11, #12. Also for adding _change_id method and accompanying tests.

Rory Zweistra, GH #9.

Andy Jack, GH #2.

COPYRIGHT AND LICENSE

This software is copyright (c) Stefan Hornburg.

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