[PHP] Chiudere sessione quando la pagina viene riaggiornata

Cosina

Utente Attivo
27 Dic 2016
40
0
6
Ciao a tutti. Ho realizzato una pagina riservata con login usando php. Quando l'utente effettua il logout, la sessione viene cancellata e non e` piu` possibile accedere alla pagina riservata se non reinserendo i dati di accesso. Se si prova a raggiungere la pagina via URL, si viene reindirizzati alla home del sito. Tutto ok, ma se l'utente non effettua il logout, puo` rientrare nella pagina tutte le volte che vuole, anche se viene riaggiornata e anche se chiude e riapre il browser. Quello che vorrei, invece, e` che la sessione terminasse , quando l'utente lascia la pagina, anche se non ha effettuato manualmente il logout. E' possibile?
Il codice della pagina di logout e` questo:

PHP:
<?php session_start(); /* Starts the session */
session_destroy(); /* Destroy started session */
header("location:../index");
exit;
?>
Grazie per l'aiuto
 

Eduadie

Utente Attivo
22 Mar 2013
58
7
8
www.mrrobotbet.altervista.org
Che io sappia non esiste una tecnica per poterlo fare, potresti o controllare con Javascript la chiusura della scheda e quindi inviare una richiesta AJAX al server per cancellare la sessione (ovviamente se il Javascript è disabilitato questa modalità non funziona) oppure puoi usare la funzione che determina il tempo di vita della sessione, in modo da "abbatterla" prima che venga chiusa la finestra.
La funzione oltre a determinare la vita, ne rinnova la scadenza se richiamata all'inizio di ogni pagina.
Però una volta abbattuta, la sessione non può essere rinnovata, questi meccanismi vengono utilizzati solitamente nei siti web dove la sicurezza è importante, come area utenti di una banca, oppure mail box online.

PHP:
session_set_cookie_params(<secondi>);
session_start();
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.039
146
63
PR
www.borgo-italia.it
ciao
ti schematizzo quello che potrebbe essere un metodo
1) pagina di log
PHP:
<?php
session_start();
$_SESSION['caso']=rand(1000,9999);//tutte le volte ache accedi alla pagina si genera un numero casuale
$per_form=md5($_SESSION['caso']);//md5 per confondere un po
?>
<form action="accesso_si_no.php?vengo_da=<?php echo $per_form; ?>" method="post">
<!-- i vari campi di input e submit necessari-->
</form>
2) pagina accesso_si_no.php (pagina senza una riga html che serve per fare le verifiche)
PHP:
<?php
session_start();
if(md5($_SESSION['caso'])!=$_GET['vengo_da']){
    //distruggo la sessione e rimando es. alla index
}else{
    //leggo i dati dal form e li verifico da db se utente registrato
    if($registrato){
        //ricreo la sessione casuale
        $_SESSION['caso']=rand(1000,9999);
        $per_riservata=md5($_SESSION['caso']);
        header('location:pagina_riservata.php?vengo_da=$per_riservata');
        exit();
    }else{//rimando alla index
   }
}
?>
3) pagina_riservata.php
PHP:
<?php
session_start();
if(md5($_SESSION['caso'])!=$_GET['vengo_da'] || !isset($_SESSION['caso']) || !isset($_GET['vengo_da'])){
    //distruggo la sessione e rimando es. alla index
}else{
    //elimino comunque la sessione tanto sino a che rimango nella pagina non mi serve
?>
<html>
<!-- tutto l'html o php che serve-->
</html>
<?php
}
?>
se esci dalla pagina riservata sensa il logout e cerchi di rientrare la sessione e il get non esistono piu o in caso di refresh sono diversi e quin non dovrei più riuscire ad entrare se non passando nuovamente dal log
prova e sappimi dire se funziona
 
  • Like
Reactions: Eduadie

Cosina

Utente Attivo
27 Dic 2016
40
0
6
Grazie mille a tutti per le risposte. Faccio le mie prove, nei prossimi giorni e poi vi faccio sapere. Ciao