[PHP] Chiudere sessione quando la pagina viene riaggiornata

  • Creatore Discussione Creatore Discussione Cosina
  • Data di inizio Data di inizio

Cosina

Utente Attivo
27 Dic 2016
101
0
16
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
 
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();
 
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
Grazie mille a tutti per le risposte. Faccio le mie prove, nei prossimi giorni e poi vi faccio sapere. Ciao
 

Discussioni simili