Estoy tratando de solucionar una función de cierre de sesión para una aplicación web. Cuando inicie sesión, la aplicación tiene varias cookies establecidas para su dominio. Este es el procedimiento de cierre de sesión actual:PHP: ¿por qué no puedo deshacerme de esta cookie de identificación de sesión?
- Hace clic en un enlace, que le envía a una página de cierre de sesión
- La página de cierre de sesión se ejecuta una función que llama
session_destroy()
y también recorre todas las galletas para el dominio y los pone a caducar en el pasado (ver código a continuación) - La página de cierre de sesión luego redirige a una página de inicio de sesión, que es HTML directo.
Al final de este proceso, todas las otras cookies son definido, pero el PHPSESSID
cookie es todavía allí, tiene el mismo valor, y todavía está a punto de expirar al final de la sesión.
¿Qué me falta aquí?
Aquí está la función de cierre de sesión que he mencionado anteriormente:
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);
}
}