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 BYTEA NOT NULL
);
and within your code use:
use CGI::Session;
$session = CGI::Session->new("driver:PostgreSQL", undef, {Handle=>$dbh, ColumnType=>"binary"});
Please note the ColumnType argument. PostgreSQL's text type has problems when trying to hold a null
character. (Known as "\0" in Perl, not to be confused with SQL NULL). If you know there is no chance of
ever having a null character in the serialized data, you can leave off the ColumnType attribute. Using a
BYTEA column type and "ColumnType => 'binary'" is recommended when using Storable as the serializer or if
there's any possibility that a null value will appear in any of the serialized data.
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,
});
For more details see CGI::Session::Driver::DBI, parent class.
Also see sqlite driver, which exercises different method for dealing with binary data.