session_destroy

(PHP 4, PHP 5, PHP 7, PHP 8)

session_destroyDestruye una sesión

Descripción

session_destroy(): bool

session_destroy() destruye todos los datos asociados a la sesión actual. Esta función no destruye las variables globales asociadas a la sesión, de igual manera, no destruye la cookie de sesión. Para acceder nuevamente a las variables de sesión, la función session_start() debe ser llamada nuevamente.

Nota: No es necesario llamar a session_destroy() desde el programa generalmente. Limpiar el array $_SESSION en lugar de destruir los datos de sesión.

Para destruir completamente una sesión, el identificador de la sesión debe ser eliminado también. Si una cookie es utilizada para propagar el identificador de sesión (comportamiento por omisión), entonces la cookie de sesión debe ser eliminada. La función setcookie() puede ser utilizada para esto.

Cuando session.use_strict_mode está activado. No es necesario eliminar las cookies de ID de sesión obsoletas ya que el módulo de sesión no acepta las cookies de ID de sesiones cuando no hay datos asociados con estos ID de sesiones y definirá una nueva cookie de ID de sesión. Activar session.use_strict_mode es recomendado para todos los sitios.

Advertencia

La eliminación inmediata de una sesión puede causar resultados inesperados. Cuando hay peticiones simultáneas, otras conexiones pueden perder repentinamente datos de sesión. Por ejemplo peticiones desde JavaScript y/o peticiones desde enlaces URL.

Aunque el módulo de sesión actual no acepta una cookie de ID de sesión vacía, la eliminación inmediata de sesión puede provocar una cookie de ID de sesión vacía debido a una condición de concurrencia lado-cliente (navegador). Esto provocará la creación de muchos ID de sesión innecesarios por el cliente.

Para evitar esto, se debe definir un timestamp en $_SESSION y rechazar el acceso a todas las fechas posteriores. O asegurarse de que su aplicación no tenga peticiones simultáneas. Esto también se aplica a session_regenerate_id().

Parámetros

Esta función no contiene ningún parámetro.

Valores devueltos

Esta función retorna true en caso de éxito o false si ocurre un error.

Ejemplos

Ejemplo #1 Destrucción de una sesión con $_SESSION

<?php
// Inicialización de la sesión.
// Si se utiliza otro nombre
// session_name("otroNombre")
session_start();

// Destruye todas las variables de sesión
$_SESSION = array();

// Si se quiere destruir completamente la sesión, también se debe eliminar
// la cookie de sesión.
// Nota: esto destruirá la sesión y no solo los datos de sesión !
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}

// Finalmente, se destruye la sesión.
session_destroy();
?>

Ver también

add a note

User Contributed Notes 3 notes

up
53
Praveen V
12 years ago
If you want to change the session id on each log in, make sure to use session_regenerate_id(true) during the log in process.

<?php
session_start
();
session_regenerate_id(true);
?>

[Edited by moderator (googleguy at php dot net)]
up
20
Jack Luo
11 years ago
It took me a while to figure out how to destroy a particular session in php. Note I'm not sure if solution provided below is perfect but it seems work for me. Please feel free to post any easier way to destroy a particular session. Because it's quite useful for functionality of force an user offline.

1. If you're using db or memcached to manage session, you can always delete that session entry directly from db or memcached.

2. Using generic php session methods to delete a particular session(by session id).

<?php
$session_id_to_destroy
= 'nill2if998vhplq9f3pj08vjb1';
// 1. commit session if it's started.
if (session_id()) {
session_commit();
}

// 2. store current session id
session_start();
$current_session_id = session_id();
session_commit();

// 3. hijack then destroy session specified.
session_id($session_id_to_destroy);
session_start();
session_destroy();
session_commit();

// 4. restore current session id. If don't restore it, your current session will refer to the session you just destroyed!
session_id($current_session_id);
session_start();
session_commit();

?>
up
-2
vitas dot lowang at gmail dot com
7 months ago
I found out that in order to really have the session data cleared after calling session_destroy(), you need to refresh the page. For example by calling
header('Location: '.$_SERVER['PHP_SELF']."?page=profile");

if you don't then there are still data in $_SESSION which was there before. I don't know if this is intended behavior but it's kind of confusing IMO...
To Top