Estoy usando la biblioteca CGI::Session para autentificar usuarios usando un controlador de MySQL.
El problema que tengo es que cada vez que se autentifica alguien, veo en MySQL, que se realiza una conexión, pero no se libera en ningún momento.
El caso es que si dichas conexiones se van acumulando, llega un momento que alcanza el límite (por defecto 101 en MySQL) y da error del servidor en la siguiente.
La creación de la sesión la hago tras hacer login:
Using perl Syntax Highlighting
- my $dbh
- = DBI->connect(
- "dbi:mysql:host=$webserver;database=$schema;tablename=sessions",
- &GetDBUser(), &GetDBPassword() )
- or die "Error de conexion a BBDD!"
- ;
- my $session
- = new CGI::Session( 'driver:mysql', undef, { Handle => $dbh } )
- or die CGI::Session->errstr
- ;
- $s_id = $session->id();
- $session->param( 'TGI', $login );
- $s_tgi = $session->param("TGI");
- $session->expire('15m');
- $session->flush();
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
Para recoger el valor de la sesión (incluido en una función a la que todas las páginas acceden siempre al principio):
Using perl Syntax Highlighting
- CGI::Session->name("session");
- my %cookies = CGI::Cookie->fetch;
- if ( $cookies{'session'} ) {
- $cookie_id = $cookies{'session'}->value;
- }
- else {
- print "Location:$scriptsURL/login.cgi?url="
- . $ENV{"HTTP_REFERER"} . "\n\n";
- exit 0;
- }
- my $dbh
- = DBI->connect(
- "dbi:mysql:host=$webserver;database=$schema;tablename=sessions",
- &GetDBUser(), &GetDBPassword() )
- or die "Error de conexion a BBDD!";
- my $session
- = CGI::Session->load( "driver:mysql", $cookie_id, { Handle => $dbh } )
- or die CGI::Session->errstr;
- if ( $session->is_expired || $session->is_empty ) {
- print "Location:$scriptsURL/login.cgi?url="
- . $ENV{"HTTP_REFERER"} . "\n\n";
- exit 0;
- }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
El funcionamiento de las sesiones es el correcto, pero no entiendo que se queden abiertas las conexiones de la BBDD.
He visto en otro post que se pueden cerrar las sesiones vía JavaScript, pero mi duda va más al comportamiento de CGI::Session cuando usa MySQL.
Gracias por adelantado.