2010-11-29 19 views
69

Desde el php.net documentación:¿Cuál es la diferencia entre session_unset() y session_destroy() en PHP?

session_destroy - Destruye todos los datos a una sesión

session_unset - Libre de todas las variables de sesión

Mi pregunta tres partes es:

Los dos las funciones parecen muy similares.
¿Cuál es realmente la diferencia entre los dos?

Ambos parecen eliminar todas las variables registradas en una sesión. ¿Alguno de ellos realmente destruye la sesión en sí? Si no, ¿cómo lo logras (destruyes la sesión en sí)?

¿Es correcto que ninguna de las dos funciones borre la cookie de sesión en el cliente?

Respuesta

103

session_unset simplemente borra la variable $_SESSION. Es lo mismo que hacer:

$_SESSION = array(); 

Así que esto afecta sólo a la $_SESSION instancia de variable local, pero no los datos de la sesión en el almacenamiento de sesión.

En contraste con eso, session_destroy destruye los datos de sesión que se almacenan en el almacenamiento de la sesión (por ejemplo, el archivo de sesión en el sistema de archivos).

Todo lo demás permanece inalterado.

+10

Respuesta breve y "al punto". +1 – Johan

+0

@Gumbo ¿No hay algún problema con la desactivación de session_unset() ahora? Comprobé esto y no funcionó para mí. – Navneet

+0

@hakre ¿cuál es la advertencia? – GoTo

14

session_destroy(); está borrando toda la sesión.

session_unset(); borra solo las variables de la sesión - la sesión todavía existe. Solo los datos se truncan.

13
session_unset(); 

Sólo borrar todos los datos de todas las variables de sesión.


session_destroy(); 

Retire toda la sesión.


Ejemplo:

session_start(); 
session_destroy();  
$a = "1234"; 
$_SESSION[a] = $a; 

$_SESSION[a] es NULL.


session_start(); 
session_unset();  
$a = "1234"; 
$_SESSION[a] = $a; 

$_SESSION[a] es 1234.


Por lo tanto, voy a utilizar:

session_start(); 
session_destroy(); 
session_start(); 
$a = "1234"; 
$_SESSION[a] = $a; 
+1

en su medio ejemplo -> 'session_unset();' NO está haciendo nada ya que todavía puede usar la sesión de '$ _SESSION [" a "]', entonces, ¿qué uso tiene? –

+0

'$ _SESSION [a]' debería ser '$ _SESSION ['a']' y, a diferencia de lo que dijiste, NO es NULO en tu primer ejemplo –

3

session_unset() despejará la variable $_SESSION (como en array()), pero no va a tocar el archivo de sesión. Pero cuando el guión termina; el estado de $_SESSION se escribirá en el archivo. Luego borrará el archivo pero no lo eliminará. Cuando usa session_destroy(), no tocará $_SESSION (Use var_dump($_SESSION) después de session_destroy()), pero eliminará el archivo de sesión, de modo que cuando se cierre la secuencia de comandos no habrá un archivo para escribir el estado de $_SESSION.

-2

Creo que session_destroy() y session_unset() deberían usarse al mismo tiempo para asegurarse de que los datos de la sesión se borren.

+0

Creo que significa que no estás seguro de la respuesta. Esto debería ser un comentario, no un responder. –

+3

'session_unset()' después de 'session_destroy()' no tendría sentido. Use 'session_unset()' para borrar todas las claves y valores del $ _SESSION superglobal, o use 'session_destroy()' para borrar toda la sesión; no use ambos solo para "asegurarse", confíe en la función para hacer su trabajo. – redburn

0

session_destroy() borrará la sesión después de mover la página y session_unset() eliminará sesión cuando se ejecuta el código.

0

Intenté usar session_unset($_SESSION['session_name']) pensando que solo se desharía el nombre de una sesión específica o individual/única. Pero usar session_unset($_SESSION['session_name']) solo desarmará todo el nombre de la sesión. El código correcto para usar es solo unset($_SESSION['session_name']) si quiere desarmar un solo nombre de sesión.

Cuestiones relacionadas