Newsgroup: it.comp.www.php
Titolo: Domanda sulle sessioni ... e logout

Ho da poco acquistato un hosting a pagamento per realizzare il mio sito
personale. Uso PHP e MYSQL. In ogni pagina PHP utilizzo la funzione
session_start() per gestire le sessioni. Ho subito notato che se chiudo la
finestra del browser, la sessione rimane "aperta" e il file sess_xxxxx non
viene cancellato. Premetto subito che non c'e' alcun login utente, percui
sarebbe poco utile mettere un pulsante o un link del tipo "Logout" o "Esci".
Le sessioni mi servono solo per mantenere lo stato di alcuni dati attraverso
le varie pagine.
Ho pensato di fare cosi': in ogni pagina HTML generata dal PHP ho messo:
---------------------
<SCRIPT LANGUAGE="javascript" FOR="window" EVENT="onunload">
<!--
OpenLogoutWindow();
//-->
</SCRIPT>
Dove OpenLogoutWindow() e' una funzione javascript che fa semplicemente:
window.open
("/close.php","Logout","resizable=no,scrollbars=no,status=0,width=10,height=
10,top=2000,left=2000");
e nel file close.php ho messo:
<?php
    session_start ();
    session_unset ();
    session_destroy ();
?>
[...altro...]
<SCRIPT LANGUAGE="javascript" FOR="window" EVENT="onload">
<!--
close ();
//-->
</SCRIPT>
---------------------
Ora, se chiudo la finestra del browser, la sessione adesso viene chiusa
correttamente. Ma ho un "piccolo" effetto collaterale. Esegue il logout
anche se faccio il refresh della pagina (con F5) o se clicco su un qualunque
link sulla pagina !!!
Mi chiedo quindi come si possa realizzare un logout *solo* quando si chiude
la finestra del browser, sempre che sia tecnicamente fattibile e non troppo
incasinato.
Grazie.

 a sessione rimane "aperta" e il file sess_xxxxx non viene cancellato
Costituisce un problema?
-- 
I'am what I'am, I do what I can
Sei un newbie? Leggi questo 
http://tinyurl.com/26nej
 

 Costituisce un problema?
A me personalmente no ! Questa cosa l'ho notata sul mio PC su cui ho
installato la "terna" Apache/PHP/MySQL per poter fare tutte le prove che
voglio prima di uploadare sul server che mi offre l'hosting a pagamento.
Penso (e spero) che il server abbia un qualche cron che cancelli i file
temporanei. Io sul server dell'hosting ho solo l'accesso "ristretto" al mio
spazio web via ftp e file manager e non posso vedere quei file di sessione !
(suppongo siano nella /tmp di sistema).

 A me personalmente no ! 
E allora lascia perdere.


 Se conosci un modo per fare il logout solo chiudendo la finestra
Qualsiasi operazione tu voglia fare chiudendo la finestra del browser,
devi agire lato client (in JavaScript). L'event handler che ti occorre
si chiama "onUnload", va inserito nel tag body cosě:
<body onunload="alert('Ciao Andrea')">
ma č un evento che gli esperti sconsigliano, in quanto poco affidabile.
Ah, non cercare l'"onclose" perché in JavaScript non esiste.
Se hai bisogno, chiedi maggiori informazioni sul gruppo
it.comp.lang.javascript, perché qui siamo OT.
HTH
Ciao! :)
-- 
Nicoletta


imposta la scadenza dei biscottini, da manuale.
session_cache_expire
(PHP 4 >= 4.2.0)
session_cache_expire -- Return current cache expire
Description
int session_cache_expire ( [int new_cache_expire])
session_cache_expire() returns the current setting of 
session.cache_expire. The value returned should be read in minutes, 
defaults to 180. If new_cache_expire is given, the current cache expire 
is replaced with new_cache_expire.
The cache expire is reset to the default value of 180 stored in 
session.cache_limiter at request startup time. Thus, you need to call 
session_cache_expire() for every request (and before session_start() is 
called).
Example 1. session_cache_expire() example
<?php
/* set the cache limiter to 'private' */
session_cache_limiter('private');
$cache_limiter = session_cache_limiter();
/* set the cache expire to 30 minutes */
session_cache_expire (30);
$cache_expire = session_cache_expire();
/* start the session */
session_start();
echo "The cache limiter is now set to $cache_limiter</ br>";
echo "The cached session pages expire after $cache_expire minutes";
?>
     Note: Setting new_cache_expire is of value only, if 
session.cache_limiter is set to a value different from nocache.
See also the configuration settings session.cache_expire, 
session.cache_limiter and session_cache_limiter().
hola-