Newsgroup: it.comp.lang.perl
Titolo: problema sessioni

Ciao,
ho un piccolo problema con la gestione delle sessioni in perl/cgi: dopo aver
installato il modulo Apache::session::* Storable, Serailizable ecc.. ecc...
ho ricopiato, per fare una prova, il seguente programmino che ho trovato
su numerosissimi siti internet che affrontano l'argomento per e sessioni.
Ora, dopo aver assegnato il session id alla mia sessione, la prima volta che
mi collego alla pagina, tutte le volte successive non dovrebbe piu' assegnare
un numero in quanto dovrebbe ricavarlo dall'apposito cookie.
Mi spiegate perche' tutte le volte che ricarico la pagina, mi assegna un
session_id diverso dal precedente?????
Grazie anticipatamente,
#!/usr/bin/perl
use CGI;
use Apache::Session::File;
my $query = new CGI;
my %session;
my $id = undef;
$id = $query->cookie(-name=>"SID01");
tie %session, 'Apache::Session::File', $id,
      { Directory => "/tmp/",
      LockDirectory => "/tmp/"};
if ($id == undef) {
   $cookie = $query->cookie( -name=>'SID01',
         -value=>$session{_session_id},
         -expires=>'+1y',
         -path=>'/session');
   print $query->header(-cookie=>$cookie);
   print "Assigned session ID<br>\n";
} else {
   print $query->header();
   print "Not assigned session ID<br>\n";
};
$id = $session{_session_id};
print "<html>n";
print " <head><title>Session ID</title></head>\n";
print " <body bgcolor=#ffffff>\n";
print " Your session ID is $id\n";
print " <a href=\"
test.pl
\">aaaaa</a>\n";
print " </body>\n";
print "</html>\n";
-- 
Giovanni Casano



Ciao,
a occhio e croce direi che possono esserci due ordini di problemi
1. Apache::Session non riesce a scrivere e/o leggere il file contenente i dati
della sessione (/tmp è leggibile e scrivibile dall'utente sotto cui gira il web
server?). In tal caso l'error_log del web server dovrebbe dirti qualche cosa di
significativo...
2. Hai messo come attributo del cookie -path => '/session' e questo significa
che il browser invierà al server (nell'header HTTP) il cookie _solo_ per URL il
cui URI inizi per /session. Ad esempio:
 
http://www.tuosito.com/session/test.pl
Ad esempio invece lo script:
 
http://www.tuosito.com/cgi-bin/test.pl
non vedrà mai il tuo cookie e creerà ogni volta una nuova sessione.
Soluzione: -path => '/'
Il mio consiglio è quello di non reinventare la ruota per la gestione delle
sessioni potendo avvalerti di moduli CPAN che già fanno questo per te
(CGI::Session e/o Apache::SessionManager se sei in ambiente mod_perl)
aggiungendo anche la capacità di utilizzare differenti datastore e di gestire le
policies di scadenza non nel cookie
by
	- Enrico

Ciao,
grazie per la risposta: credi davvero che CGI:: o Apache::SessionManager siano
superiori ad Apache::Session?
Quale dei due e' piu' semplice da gestire?
Giovanni


 Quale dei due e' piu' semplice da gestire?
Apache::SessionManager è un modulo basato su Apache::Session, richiede mod_perl
è configurabile da httpd.conf (o .htaccess) e consente di tracciare le sessioni
anche senza l'utilizzo dei cookie (URI tracking)
CGI::Session non richiede necessariamente mod_perl e l'unico difetto evidente è
che non essendo + basato su Apache::Session dispone di molti meno driver per i
datastore (solo file, DB_File e MySQL e non mi pare ci sia supporto per Oracle,
Postegres, Sybase, RAM, ecc ecc disponibili invece per Apace::Session)
Il consiglio è quindi di provarli entrambi e vedere quello a te più congeniale!
:-)
by
	- Enrico

 Il consiglio è quindi di provarli entrambi e vedere quello a te più congeniale!
Concordo e segnalo anche CGI::kSession

 Postegres, Sybase, RAM, ecc ecc disponibili invece per Apace::Session)
Piccola correzione, esiste CGI::Session::ODBC per memorizzare le sessioni su
database ODBC compatibili
by
	- Enrico

 
-- 
Giovanni

Enrico scriveva:

E anche CGI::Session::PostgreSQL, specifico per questo database.
"Specifico" soltanto nella gestione del lock dei record relativi
alle sessioni, ma immagino che si possa anche pensare ad un
CGI::Session::DBI... ;-)  (?)
-- 
Cosimo