Caio a tutti ragazzi, sto creando una pagina di log_in e da questa devo fare in modo che se esiste l'utente nel DB, apro una sessione per lui, in caso contrario lo faccio registrare.
Girando per la rete ho trovato una parte di script di esempio di utilizzo delle CGI::SESSION, ho anche seguito un tutorial e devo dire che funzionano, ma non sono sicuro che sia giusto così, ed inoltre non riesco a tirare fuori i dati dalla sessione.
Il package Sessioni_CGI::Sessioni l'ho creato io perchè devo aprire una sessione per ogni utente ed anche perchè mi piacerebbe in un futuro separarlo dal main e richiamarlo come programma esterno (ma questa è un altra storia).
Il mio script si presenta così:
{
package Sessioni_CGI::Sessioni;
use strict;
use warnings;
use CGI;
use CGI::Session;
sub SetLogIn {
my $User_id= shift;
my $Username= shift;
my $Password= shift;
my $Nome= shift;
my $Cognome= shift;
my $Email= shift;
#print "$User_id, $Username, $Password, $Nome, $Cognome, $Email";
my $session = new CGI::Session("driver:File", undef, {Directory=>'/tmp'});
# getting the effective session id:
my $CGISESSID = $session->id();
# storing data in the session
$session->param('User_id', $User_id);
$session->param('Username', $Username);
$session->param('Password', $Password);
$session->param('Nome', $Nome);
$session->param('Cognome', $Cognome);
$session->param('Email', $Email);
$session->flush();
# clearing a certain session parameter
$session->clear(["_IS_LOGGED_IN"]);
# prova ad utilizzare il campo email
my $email = $session->param('Email');
print "email: $email";
# expire '_IS_LOGGED_IN' flag after 10 idle minutes:
$session->expire(_IS_LOGGED_IN => '+10m');
# expire the session itself after 1 idle hour
$session->expire('+1h');
# delete the session for good
$session->delete();
}
}
#recupero dati dal form
my $ut_username=$cgi->param('username');
my $ut_password=$cgi->param('password');
# se ci sono i dati faccio la select e controllo così che ci sia l' utente nel DB
if($ut_username && $ut_password){
my $sql = "SELECT Utente.Id, Utente.Username, Utente.Password, Utente.Nome, Utente.Cognome, Utente.Email
FROM Utente
WHERE Username = '$ut_username' AND Password = '$ut_password'
";
my $sth = $dbh->prepare($sql);
$sth->execute or die "SQL Error: $DBI::errstr\n";
my $numRows = $sth->rows;
# se il NUm_rows è > di 1 significa che è presente e quindi procedo con la creazione della sessione
if ($numRows != 0){
my @Array_Utente_Info=$sth->fetchrow_array; #gli passo un array contenente il risultato della query
Sessioni_CGI::Sessioni::SetLogIn(@Array_Utente_Inf o);# richiamo la funzione passandogli un array di dati
#print @Array_Utente_Info;
}else {
print "chi sei?";
}
#
#DA QUI IN POI DOVREI UTILIZZARE LE VARIABILI DI SESSIONE MA COME ????????
#
Le mie domande sono:
- è qiusto cancellare subito una sessione subito dopo averla creata?? i dati non credo che rimangano, ma se tolgo il $session->delete(); si aprono più sessioni per uno stesso utente
-perchè non riesco ad accedere ai dati della sessione all'esterno della mia funzione?? sò che con my dichiaro una variabile locale, ma come in php i dati non vengono memorizzati in array superglobale, oppure (visto che sono memorizzati nel file) non dovrei accedere ai dati della sessione da qualunque punto del mio programma??
Ho le idee un pò confuse!!!
Grazie a tutti per l'aiuto.