Newsgroup: it.comp.www.php
Titolo: Evento tasto back browser

Vorrei poter gestire l'"evento" tasto back del browser per fare in modo che 
dopo un login, tornando indietro e poi avanti, la sessione scada e sia 
necessario rifare il login.
E' possibile ciň?
Infine, usando le sessioni per autenticarsi, č normale che accedendo alla 
maschera di login, si crei (sul server) un file "sessione" di 0 KB e dopo il 
login lo stesso file diventi di 1 KB? Mi aspettavo di trovare il file (sul 
server) solo a login correttamente effettuato, non dopo il caricamento della 
maschera per il login oppure dopo un tentativo errato di user/pass (ripeto, 
file di 0 Kb).
Grazie.
-- 
Gregor 

 file di 0 Kb).
Si perchè la creazione della sessione avviene nella maschera di login, 
ma non avendo nessuna info memorizzata, il file è correttamente a 0; 
nello step successivo aggiungi delle var alla sessione, incrementando il 
file.
	Francesco

 E' possibile ciò?
Nella pagina dove c'è la maschera per il login inserisci come prima
riga:
session_destoy();
Così ogni volta che un utente visualizza il login è costretto ad
eseguirlo, non potrà navigarci attraverso anche se si è loggato in
precedenza.
Ciao
Max

 il file.
Ok.
Grazie molte!
-- 
Gregor 

 session_destoy();
Grazie proverň!
-- 
Gregor 

 precedenza.
Questo pero' non funzionera' nel caso in cui il browser, dando il back,
vada a ripescare la pagina di login nella sua cache senza riscaricarla
dal server. E spesso e' proprio questo che succede.

 riscaricarla dal server. E spesso e' proprio questo che succede.
Quindi tu come faresti ad aggirare il problema?
Tnx!
-- 
Gregor 

> Quindi tu come faresti ad aggirare il problema?
La prima cosa che mi viene in mente è questa:
l'oggetto history possiede la proprietà .next che contiene l'url della
pagina successiva nell'history. Ovviamente questa proprietà conterrà
un valore valido solo nel caso in cui "si provenga da un back"...
altrimenti sarà nulla.
Quindi tu all'evento onLoad della pagina (che viene invocato anche se
la pagina viene ripescata nella cache) imposta un check su questa
proprietà e nel caso sia definita (quindi veniamo da un back) forza un
reload della pagina stessa (dopo aver inserito session_destroy() nel
codice come suggerito sopra).
A occhio e croce dovrebbe funzionare... ovviamente se sbaglio
correggetemi!
Andrea

> Quindi tu come faresti ad aggirare il problema?
Imposta via php gli header opportuni per non far fare cache.
Trovi l'esempio sul manuale alla voce header().
--
rob4you

 Trovi l'esempio sul manuale alla voce header().
Grazie a tutti per i suggerimenti.
--
Gregor

Detto che quando si usano le SESSION, COOKIES e si è in presenza di
pagine PHP dinamiche, per mantenere in cache la pagina, il tuo browser
deve essere stato configurato con il "fondo schiena" di proposito.
Detto questo l'unico che ha scritto qualcosa di veramente sensato è
Roby!
Ma scusate, vi pare che si debba guardare la proprietà dell'history
per evitare che una pagina resti in CACHE?????
Esistono delle funzioni fatte apposta, cmq trovi esempi già pronti
alla voce header(); (proprio come ha detto Roby) sul sito 
www.php.net
Ciao a tutti
rob4you ha scritto:


 > Trovi l'esempio sul manuale alla voce header().
Ho provato tramite l'es. suggerito su 
php.net
, inserendo in cima alla
pagina
<?php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");    // Data passata
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
                                                     // sempre
modificato
header("Cache-Control: no-store, no-cache, must-revalidate");  //
HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");                          // HTTP/1.0
require_once('globalarea.php'); ?>
però sia IE che Firefox non mi richiedono la login dopo il back da
browser!
Successivamente ho
session_start();
e i controlli per la login.
Qualche dritta?
Tnx!
--
Gregor

> Qualche dritta?
Certo, devi distruggere le eventuali variabili di sessione:
dopo:
session_start();
inserisci:
$_SESSION = array();
--
rob4you
www.outofmind.eu

>> Qualche dritta?
Un'altra cosa:
non so cosa contenga il file che includi globalarea.php, ma caso mai 
puoi richiamare session_start e compagnia prima di quell'include, 
perché se per caso globalarea.php contiene dell'output, avrai un 
problema di "headers already sent".
--
rob4you
www.outofmind.eu

 problema di "headers already sent".
Non rilevo quel tipo di errore (non ne rilevo alcuno, per l'esattezza), in 
quanto non genero output.
Ad ogni modo proverò.
Grazie molte!
-- 
Gregor 

> Contiene i parametri per collegamento al db
Allora no problem, puoi tranquillamente inserirlo prima.
Mi raccomando, fai la prova che ti ho detto nel mex precedente, e fai 
sapere. :-)
--
rob4you

 sapere. :-)
Bingo! :D
Grazie mille!
Una precisazione: ho creato una pagina logout.php raggiungibile
mediante un link all'interno della pagina "privata", cioè
raggiungibile dopo aver effettuato il login.
Il codice nella pagina di login è quello riportato nel messaggio
precedente, con l'aggiunta di $_SESSION =array();
Se la pagina logout.php la inizio con
<?php
$_SESSION = array();
session_destroy();
?>
al momento del logout ottengo un warning: "Trying to destroy
uninitialized session", problema che non si presenta se modifico in
<?php
session_start();
$_SESSION = array();
session_destroy();
?>
Ma la cosa che mi chiedo è: "perchè devo rifare un session_start();
dal momento che già nel login lo faccio e poi la sessione non la
distruggo mai (se non appunto nel logout.php)?
Insomma mi sembra di aprire due sessioni per chiuderne una o_O
Grazie a chi vorrà dirmi la sua.
--
Gregor

 Insomma mi sembra di aprire due sessioni per chiuderne una o_O
Non è cosi. :-) come dice il manuale:
"session_start() creates a session or resumes the current one based on 
the current session id that's being passed via a request, such as GET, 
POST, or a cookie."
Se non metti session_start() all'inizio di ogni pagina in cui usi 
variabili di sessione (sia pure per distruggerle), come fa PHP a sapere 
a quale sessione fare riferimento?
Come vedi session_start non necessariamente apre una nuova sessione, 
bensì può anche riprendere quella che gli è stata passata "in qualche 
modo".
In soldoni, ogni volta che nella pagina usi qualcosa che centra con le 
sessioni, è FONDAMENTALE imporre come prima riga del codice: 
session_start(). :-)
--
rob4you
www.outofmind.eu

 session_start(). :-)
Dovrò approfondire, anche se sei stato chiaro :D
Grazie ancora!
--
Gregor