# perldoc > CGI::Session::Driver::DBI

---
type: CommandReference
command: CGI::Session::Driver::DBI
mode: perldoc
section: ""
source: perldoc
---

## Quick Reference

- `require CGI::Session::Driver::DBI; @ISA = qw(CGI::Session::Driver::DBI);` — Create a new DBI-driven session driver by inheritance
- `CREATE TABLE sessions ( id CHAR(32) NOT NULL PRIMARY KEY, a_session TEXT NOT NULL );` — Minimum database table required
- `$s = CGI::Session->new('driver:sqlite', undef, {TableName=>'my_sessions'});` — Use custom table name
- `$s = CGI::Session->new('driver:pg', undef, {IdColName=>'my_id', DataColName=>'my_data'});` — Use custom column names
- `$s = CGI::Session->new('driver:pg', undef, {Handle=>$dbh});` — Use an existing DBI handle

## Name

Base class for native DBI-related CGI::Session drivers

## Synopsis

perl
require CGI::Session::Driver::DBI;
@ISA = qw( CGI::Session::Driver::DBI );
## Options

- `DataSource` — First argument to `DBI->connect()`. If the driver connects itself, it will also disconnect on DESTROY.
- `User` — Privileged user for the database.
- `Password` — Password for the user.
- `Handle` — An existing DBI database handle object. Can be a code reference (e.g., `sub { DBI->connect }`) for lazy connection. Overrides DataSource, User, Password.
- `TableName` — Name of the session table. Default: `sessions`.
- `IdColName` — Column name for session ID. Default: `id`.
- `DataColName` — Column name for serialised session data. Default: `a_session`.

## Examples

### Creating a DBI-based session driver

perl
package My::Driver;
use base 'CGI::Session::Driver::DBI';
1;
### Setting up the database table

sql
CREATE TABLE sessions (
    id CHAR(32) NOT NULL PRIMARY KEY,
    a_session TEXT NOT NULL
);
### Using a custom table and column names

perl
$s = CGI::Session->new('driver:pg', undef, {
    TableName   => 'session',
    IdColName   => 'my_id',
    DataColName => 'my_data',
    DataSource  => 'dbi:pg:dbname=project',
});
### Passing an existing database handle

perl
$s = CGI::Session->new('driver:pg', undef, {
    Handle => $dbh,
});
## See Also

- [CGI::Session](https://metacpan.org/pod/CGI::Session) — parent module
- [CGI::Session::Driver::sqlite](https://metacpan.org/pod/CGI::Session::Driver::sqlite) — example driver built on this base class