2009-02-03 23 views
18

Ho sentito risposte contrastanti su questo argomento, quindi qual è un modo sicuro per distruggere una sessione PHP?Distruggere veramente una sessione PHP?

session_start(); 
if(isset($_SESSION['foo'])) { 
    unset($_SESSION['foo']; 
    ... 
} 
session_destroy(); 

Nei casi più semplici, sarebbe sufficiente per terminare realmente la sessione tra l'utente e il server?

+0

Date un'occhiata all'indirizzo: http://stackoverflow.com/questions/10648565/destroying-php-session/10662060#10662060 – Brett

risposta

40

Per distruggere una sessione è necessario adottare le seguenti misure:

  • cancellare i dati della sessione
  • invalidare la sessione ID

Per fare ciò, I ‘D Usare questo:

session_start(); 
// resets the session data for the rest of the runtime 
$_SESSION = array(); 
// sends as Set-Cookie to invalidate the session cookie 
if (isset($_COOKIE[session_name()])) { 
    $params = session_get_cookie_params(); 
    setcookie(session_name(), '', 1, $params['path'], $params['domain'], $params['secure'], isset($params['httponly'])); 
} 
session_destroy(); 

E per essere sicuri che l'ID di sessione non è valida, si dovrebbe consentire solo gli ID di sessione che venivano avviate da script. Quindi impostare un flag e verificare se è impostato:

session_start(); 
if (!isset($_SESSION['CREATED'])) { 
    // invalidate old session data and ID 
    session_regenerate_id(true); 
    $_SESSION['CREATED'] = time(); 
} 

Inoltre, è possibile utilizzare questo timestamp per scambiare l'ID di sessione periodicamente per ridurre la sua vita:

if (time() - $_SESSION['CREATED'] > ini_get('session.gc_maxlifetime')) { 
    session_regenerate_id(true); 
    $_SESSION['CREATED'] = time(); 
} 
+2

Grande riscontro, grazie Gumbo. –

+2

So che questo è vecchio, ma hai appena risposto come 3 domande in una sola risposta per me. Grazie! – jefffan24

+0

Nel vostro primo esempio sulla linea 5, invece di '$ _COOKIES' dovrebbe essere' $ _COOKIE', altrimenti si potrebbe chiedere perché non è mai distruggere il cookie di sessione dal 'isset ($ _ COOKIE [session_name()])' non sarebbero mai valutare al vero –

0

In un sito che ho realizzato dove ho usato le sessioni PHP, non ho mai distrutto la sessione.

Il problema è che devi chiamare lo session_start() per controllare le tue variabili $_SESSION, a quel punto, ecco, hai comunque creato un'altra sessione.

qui sul mio sito ho appena fatto in modo che ogni pagina chiamata session_start(), e poi basta unset() quelle parti lo stato di sessione che importa quando l'utente si disconnette.

+0

Grazie per l'input Alnitak, questo è quello che sospettavo chiamando session_start() su ogni pagina. Continuerò a disinserire le variabili man mano che vengono utilizzate. –

Problemi correlati