2012-03-02 15 views
5

¿Qué función tiene session_destroy()? Para eliminar todas las variables de sesión en la matriz global $ _SESSION, tengo que usar session_unset(). Para eliminar sesión desde el navegador del cliente (eliminar id de sesión y nombre) Tengo que las galletas no se ha establecido:¿Por qué session_ destroy() es necesario?

unset($_COOKIES[session_id()]); 
unset($_COOKIES[session_name()]); 

Por qué se necesita session_destroy() función?

+0

http://us.php.net/manual/en/function.session-destroy.php –

+0

Muchas gracias, lo he leído varias veces pero no puedo entender lo que hace. Por qué en realidad no destruye la sesión. Para destruir la sesión, tengo que usar dos pasos más. Pero de hecho, session_destroy() debería hacer esos pasos por mí. – Green

+2

Si la respuesta de * Another Code * le proporcionó la información que necesitaba (no veo cómo no pudo hacerlo), ¿podría aceptarla? Por lo general, así se hacen las cosas aquí: p – RobinJ

Respuesta

11

session_destroy() finaliza la sesión completa, lo que significa que se eliminará del almacenamiento de la sesión de PHP y no podrá volver a utilizarse. Si solo desarma las variables de sesión y las cookies, la sesión aún estaría activa en el lado del servidor y podría reciclarse si se establecen algunas variables de sesión nuevamente y la cookie con la ID de la sesión original se envía nuevamente al cliente.

Para decirlo de otra manera: una sesión consiste básicamente en una ID secreta almacenada en algún lugar en el servidor web, junto con las variables de sesión registradas en esa sesión. El ID de sesión se envía al cliente (generalmente como una cookie) para que el cliente pueda identificarse como 'propietario' de la sesión en solicitudes posteriores. Si se asume que una sesión ya se ha creado y tiene las variables registrados en él, aquí está un resumen de lo que las funciones hacen:

  • session_start() importa todos las variables de sesión que pertenecen a la ID de sesión que el cliente envía desde el registro de sesión a la $_SESSION gama
  • session_unset() o llamando unset() en $_SESSION las variables limpiará todas las variables registradas para la sesión actual, pero no clara la sesión en sí
  • desarmado la cookie de sesión del cliente será la señal de la CLI ent que la sesión ha terminado, pero esto no eliminará la sesión del registro de sesión en el servidor, ya sea
  • session_destroy() es la única función que realmente va a purgar la sesión del registro de la sesión, por lo tanto, literalmente, 'destruir' la sesión

Mientras session_destroy() se anulará el registro todas las variables de sesión, no se borrará la matriz $_SESSION en la secuencia de comandos que se está ejecutando actualmente, por lo que es una buena idea para desarmar las variables de sesión para evitar errores y problemas de seguridad.

En una nota relacionada, el manual de PHP recomienda no utilizar session_unset() sino que no se ha establecido las claves de $_SESSION:

Si se utiliza $_SESSION (o $HTTP_SESSION_VARS para PHP 4.0.6 o menos), utilice unset() a anular el registro de una variable de sesión, es decir, unset($_SESSION['varname']);.

+0

'Solo use session_unset() para el código obsoleto que no use $ _SESSION.' Para liberar todas las VARIABLES DE SESIÓN use: ' $ _SESSION = array() ' – MTVS

Cuestiones relacionadas