CGI::Session::Driver::DBI - Base class for native DBI-related CGI::Session drivers
| Use Case | Code | Description |
|---|---|---|
| π οΈ Inherit from base | @ISA = qw( CGI::Session::Driver::DBI ); | Make your driver subclass the DBI base class. |
| πΎ Create session with custom table | $s = CGI::Session->new('driver:sqlite', undef, {TableName=>'my_sessions'}); | Store sessions in a table named my_sessions. |
| π Use existing DBI handle | {Handle=>$dbh} | Pass an alreadyβconnected DBI database handle. |
| π·οΈ Custom column names | {IdColName=>'my_id', DataColName=>'my_data'} | Override default id and a_session columns. |
require CGI::Session::Driver::DBI;
@ISA = qw( CGI::Session::Driver::DBI );
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!
π 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.
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,
});
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.
For support and licensing information see CGI::Session
perl v5.22.1 2016-01-15 CGI::Session::Driver::DBI(3pm)
Generated by phpman v4.9.26-1-g511901d Author: Che Dong Under GNU General Public License
2026-08-09 10:27 @2600:1f28:365:80b0:50b3:453e:ff52:20f7
CrawledBy CCBot/2.0 (https://commoncrawl.org/faq/)
Enhanced by LLM: deepseek-v4-flash / taotoken.net / www.chedong.com - original format