<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">###############################################################################
# Title: Enhanced_MySQL.pm
# By: Noel Geren
# Memo: Re-write of the MySQL driver
# $Id: Enhanced_MySQL.pm,v 1.6 2004/03/27 16:23:39 ngeren Exp $
###############################################################################
package CGI::Session::Enhanced_MySQL;

use strict;
use base qw(
    CGI::Session
    CGI::Session::ID::MD5
    CGI::Session::Serialize::Default
);

use Data::Dumper;
use DBI;
use vars qw($VERSION $TABLE_NAME);

$VERSION = '$Id: Enhanced_MySQL.pm,v 1.6 2004/03/27 16:23:39 ngeren Exp $';
$TABLE_NAME = 'sessions';

###############################################################################
# store ( &lt;self&gt;, &lt;sid&gt;, &lt;options&gt;, &lt;data&gt; )
###############################################################################
sub store {
    my ($self, $sid, $options, $data) = @_;
	my ($dbh) = $self-&gt;getConnection($options);
	if ($dbh) {
		my $storable_data = $self-&gt;freeze($data);
		my ($replace_sth) = $dbh-&gt;prepare("REPLACE $TABLE_NAME SET id = ?, session = ?");
		my ($replaced) = $replace_sth-&gt;execute($sid,$storable_data);
		$replace_sth-&gt;finish();
		$dbh-&gt;disconnect();
		return (1);
	}
    return (0);
}
###############################################################################


###############################################################################
# retrieve ( &lt;self&gt;, &lt;sid&gt;, &lt;options&gt; )
###############################################################################
sub retrieve {
    my ($self, $sid, $options) = @_;
    my ($dbh) = $self-&gt;getConnection($options);
	if ($dbh) {
		my ($sth) = $dbh-&gt;prepare("SELECT session FROM $TABLE_NAME WHERE id = ?");
		$sth-&gt;execute($sid);
		my ($frozen_data) = $sth-&gt;fetchrow_array();
		my ($found) = $sth-&gt;rows();
		$sth-&gt;finish();
		$dbh-&gt;disconnect();
		return ($self-&gt;thaw($frozen_data));
	}
	return undef;
}
###############################################################################


###############################################################################
# remove ( &lt;self&gt;, &lt;sid&gt;, &lt;options&gt; )
###############################################################################
sub remove {
    my ($self, $sid, $options) = @_;
    my ($dbh) = $self-&gt;getConnection($options);
	if ($dbh) { 
        my ($removed) = $dbh-&gt;do("DELETE FROM $TABLE_NAME WHERE id = ?",undef,$sid);
		$dbh-&gt;disconnect();
		if ($removed&gt;0) {
		    return (1);
		} 
		else {
		    return (0);
        }
    }   
}
###############################################################################


###############################################################################
# teardown ( &lt;self&gt;, &lt;sid&gt;, &lt;options&gt; )
###############################################################################
sub teardown {
    my ($self, $sid, $options) = @_;
	return (1);
}
###############################################################################


###############################################################################
# getConnection ( &lt;self&gt;, &lt;options&gt; )
###############################################################################
sub getConnection {
	my ($self,$options) = @_;
	my (%connection_options) = %{@{$options}[1]};
	
	my ($user) = $connection_options{'User'};
	my ($password) = $connection_options{'Password'};
	my ($dsn) = $connection_options{'DSN'};

	if(!$dsn) {
		print STDERR "No DSN Specified\n";
		return (undef);
	} 
	else {
		my ($dbh) = DBI-&gt;connect($dsn,$user,$password) || die "$!\n\n";
		return ($dbh);
	}
}
###############################################################################

1;       

=pod

=head1 NAME

CGI::Session::Enhanced_MySQL - Updated MySQL CGI::Session driver

=head1 SYNOPSIS
    
    use CGI::Session::
    $session = new CGI::Session("driver:Enhanced_MySQL", undef, { 
        'DSN'       =&gt; 'DBI:mysql:[table]:[host]',
        'User'      =&gt; '[username]', 
        'Password'  =&gt; '[password]',
    });

For more examples, consult L&lt;CGI::Session&gt; manual

=head1 DESCRIPTION

CGI::Session::Enhanced_MySQL is a CGI::Session driver.
To write your own drivers for B&lt;CGI::Session&gt; refere L&lt;CGI::Session&gt; manual.

=head1 COPYRIGHT

Copyright (C) 2004 Noel Geren. All rights reserved.

This library is free software and can be modified and distributed under the same
terms as Perl itself. 

=head1 AUTHOR

Noel Geren

=head1 SEE ALSO

=over 4

=item *

L&lt;CGI::Session|CGI::Session&gt; - CGI::Session manual

=item *

L&lt;CGI::Session::Tutorial|CGI::Session::Tutorial&gt; - extended CGI::Session manual

=item *

L&lt;CGI::Session::CookBook|CGI::Session::CookBook&gt; - practical solutions for real life problems

=item *

B&lt;RFC 2965&gt; - "HTTP State Management Mechanism" found at ftp://ftp.isi.edu/in-notes/rfc2965.txt

=item *

L&lt;CGI|CGI&gt; - standard CGI library

=item *

L&lt;Apache::Session|Apache::Session&gt; - another fine alternative to CGI::Session

=back

=cut

# $Id: Enhanced_MySQL.pm,v 1.6 2004/03/27 16:23:39 ngeren Exp $ 
</pre></body></html>