NAME¶
CGI::Session::Driver::DBI - Base class for native DBI-related CGI::Session
drivers
SYNOPSIS¶
require CGI::Session::Driver::DBI;
@ISA = qw( CGI::Session::Driver::DBI );
DESCRIPTION¶
In most cases you can create a new DBI-driven CGI::Session driver by simply
creating an empty driver file that inherits from CGI::Session::Driver::DBI.
That's exactly what sqlite does. The only reason why this class doesn't suit
for a valid driver is its name isn't in lowercase. I'm serious!
NOTES¶
CGI::Session::Driver::DBI defines
init() method, which makes DBI handle
available for drivers in
Handle - object attribute regardless of what
"\%dsn_args" were used in creating session object. Should your
driver require non-standard initialization you have to re-define
init()
method in your
.pm file, but make sure to set 'Handle' - object
attribute to database handle (returned by DBI->connect(...)) if you wish to
inherit any of the methods from CGI::Session::Driver::DBI.
STORAGE¶
Before you can use any DBI-based session drivers you need to make sure
compatible database table is created for CGI::Session to work with. Following
command will produce minimal requirements in most SQL databases:
CREATE TABLE sessions (
id CHAR(32) NOT NULL PRIMARY KEY,
a_session TEXT NOT NULL
);
Your session table can define additional columns, but the above two are
required. Name of the session table is expected to be
sessions by
default. You may use a different name if you wish. To do this you have to pass
TableName as part of your " \%dsn_args ":
$s = CGI::Session->new('driver:sqlite', undef, {TableName=>'my_sessions'});
$s = CGI::Session->new('driver:mysql', undef,
{
TableName=>'my_sessions',
DataSource=>'dbi:mysql:shopping_cart'.
});
To use different column names, change the 'create table' statement, and then
simply do this:
$s = CGI::Session->new('driver:pg', undef,
{
TableName=>'session',
IdColName=>'my_id',
DataColName=>'my_data',
DataSource=>'dbi:pg:dbname=project',
});
or
$s = CGI::Session->new('driver:pg', undef,
{
TableName=>'session',
IdColName=>'my_id',
DataColName=>'my_data',
Handle=>$dbh,
});
DRIVER ARGUMENTS¶
Following driver arguments are supported:
- DataSource
- First argument to be passed to DBI->connect(). If the driver
makes the database connection itself, it will also explicitly disconnect
from the database when the driver object is DESTROYed.
- User
- User privileged to connect to the database defined in
"DataSource".
- Password
- Password of the User privileged to connect to the database defined
in "DataSource"
- Handle
- An existing DBI database handle object. The handle can be created on
demand by providing a code reference as a argument, such as
"<sub{DBI-"connect}>>. This way, the database
connection is only created if it actually needed. This can be useful when
combined with a framework plugin like CGI::Application::Plugin::Session,
which creates a CGI::Session object on demand as well.
"Handle" will override all the above arguments, if any
present.
- TableName
- Name of the table session data will be stored in.
LICENSING¶
For support and licensing information see CGI::Session