Próbuję rozwiązać problem z funkcją wylogowania dla aplikacji internetowej. Po zalogowaniu aplikacja ma kilka plików cookie dla swojej domeny. Oto obecna procedura wylogowania:PHP - dlaczego nie mogę się pozbyć tego identyfikatora sesji?
- kliknąć link, który wysyła do strony wylogowania
- Strona wylogowania uruchamia funkcję, która zwraca
session_destroy()
i pętle również poprzez wszystkie pliki cookie dla domeny i ustawia je do wygasają w przeszłości (patrz kod poniżej) - Strona logowania następnie przekierowuje do strony logowania, która jest prostym kodem HTML.
Pod koniec tego procesu, wszystkie inne ciasteczka są ustawione, ale PHPSESSID
Cookie to nadal istnieje, ma taką samą wartość, a wciąż wygasnąć pod koniec sesji.
Czego tu mi brakuje?
Oto funkcja wylogowania wspomniałem powyżej:
function log_out_current_user() {
// Destroy the session
if (isset($_SESSION)) {
session_destroy();
}
// Expire all of the user's cookies for this domain:
// give them a blank value and set them to expire
// in the past
if (isset($_SERVER['HTTP_COOKIE'])) {
$cookies = explode(';', $_SERVER['HTTP_COOKIE']);
foreach($cookies as $cookie) {
$parts = explode('=', $cookie);
$name = trim($parts[0]);
setcookie($name, '', time()-1000);
setcookie($name, '', time()-1000, '/');
}
// Explicitly unset this cookie - shouldn't be redundant,
// but it doesn't hurt to try
setcookie('PHPSESSID', '', time()-1000);
}
}