2009-04-17 20 views
6

È possibile che non elimini correttamente le sessioni PHP quando l'utente si disconnette. Ho notato che se esco e riaccendo senza chiudere il browser, l'ID di sessione non cambia ma se esco, chiudo la finestra del browser, ne apro uno nuovo e accedo, l'ID di sessione sarà diverso . Devo fare qualcosa di diverso o questo comportamento normale? Sto usando lo stesso processo da tre anni ma qualcosa è successo di recente che mi ha fatto pensare che forse Ho bisogno di fare qualcosa di diverso.Come eliminare una sessione PHP?

Ecco cosa faccio fondamentalmente quando qualcuno fa clic su Esci.

<?php 

session_start(); 

if(isSet($_SESSION['FacID'])) 
    $facID = $_SESSION['FacID']; //Want to re-instate this after we destroy the session. 

unset($_SESSION); 
session_destroy(); 

if(isSet($_SESSION['FacID'])) 
    $_SESSION['FacID'] = $facID; 

?> 

risposta

0

Che cos'ha il massiccio save-and-destroy? Basta session_start e imposta le tue variabili. Non c'è bisogno di distruggere, quindi resettarli!

Il tuo "problema" con il browser è che quando chiudi la finestra del browser, il browser sta eliminando il cookie che PHP lo invia in modo da conoscere l'ID della sessione. Questa è un'opzione del browser e non può essere modificata sul lato server (a meno che tu non lo sfrutti). Può essere aggirato usando alcuni metodi, ma probabilmente non è la soluzione migliore.

5

Se si sente il bisogno di forzare un nuovo id http://pl.php.net/manual/en/function.session-regenerate-id.php

E alla tua domanda, dal manuale:

session_destroy() distrugge tutti i dati associati alla sessione corrente . Non annulla alcuna delle variabili globali associate alla sessione o disattiva il cookie di sessione. Per utilizzare nuovamente le variabili di sessione, è necessario chiamare session_start().

Per interrompere la sessione in totale, come per registrare l'utente, l'ID di sessione deve anche essere disinserito. Se viene utilizzato un cookie per propagare l'id di sessione (comportamento predefinito), quindi il cookie di sessione deve essere eliminato. setcookie() può essere usato per quello.

1

La sessione è stata distrutta.

PHP genererà un ID di sessione solo se il browser non ne specifica uno. Finché la sessione è stata rubata, non ci sono problemi con questo.

+0

Quindi il fatto che lo stesso ID di sessione (se il browser non è chiuso) utilizzato per più utenti non è davvero un problema? – user39653

+0

Poiché esiste un numero limitato di ID di sessione, OGNI ID viene utilizzato per più utenti. Riutilizzarli non è un problema. –