De la documentación de php.net :
session_destroy : destruye todos los datos registrados en una sesión
session_unset - Libera todas las variables de sesión
Mi pregunta de tres partes es:
Las dos 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 es así, ¿cómo lo logras (destruye la sesión en sí)?
¿Es correcto que ninguna de las dos funciones borre la cookie de sesión en el cliente?
fuente
local $_SESSION variable instance vs session data in the session storage
. Como sé, hay 1000 personas como yo que no entendieron su punto. Graciassession_destroy();
está eliminando toda la sesión.session_unset();
elimina solo las variables de la sesión; la sesión aún existe. Solo se truncan los datos.fuente
Ejemplo :
session_start(); session_destroy(); $a = "1234"; $_SESSION[a] = $a;
session_start(); session_unset(); $a = "1234"; $_SESSION[a] = $a;
Entonces, usaré:
session_start(); session_destroy(); session_start(); $a = "1234"; $_SESSION[a] = $a;
fuente
session_unset();
NO está haciendo nada ya que todavía puede usar session of$_SESSION["a"]
, entonces, ¿para qué sirve?$_SESSION[a]
debería ser$_SESSION['a']
y, a diferencia de lo que dijo, esto NO es NULO en su primer ejemplosession_unset()
borrará la$_SESSION
variable (como enarray()
), pero no tocará el archivo de sesión. Pero cuando termina el guión; el estado del$_SESSION
se escribirá en el archivo. Luego borrará el archivo pero no lo eliminará. Cuando lo usesession_destroy()
, no tocará$_SESSION
(Usarvar_dump($_SESSION)
despuéssession_destroy()
), pero eliminará el archivo de sesión, por lo que cuando el script salga, no habrá un archivo para escribir el estado del$_SESSION
.fuente
session_destroy()
eliminará la sesión después de mover la página ysession_unset()
eliminará la sesión cuando se ejecute el código.fuente
Traté de usar el
session_unset($_SESSION['session_name'])
pensamiento de que solo desarmará el nombre de sesión específico o individual / único. Pero usarsession_unset($_SESSION['session_name'])
solo desarmará todos los nombres de sesión. El código correcto para usar es solounset($_SESSION['session_name'])
si desea desarmar un solo nombre de sesión.fuente
session_start (); # creará una matriz virtual (asociativa) en la memoria en tiempo real del navegador
dos elementos añadidos
> $_SESSION['me'] = "Yadab"; > $_SESSION['you'] = "Avi"; > > print_r($_SESSION); #will give, array( "me"=>"Yadab", "you"=>"Avi" )
test1
> unset($_SESSION['me']); #only 'me' variable is removed fully (index & value) > print_r($_SESSION); #now the array is Array("you"=>"Avi")
test2
> session_destroy(); #will unset the values of all session variables, but indexes exists > print_r($_SESSION); #Output, Array("you"=>undefined) > #but some browser can store the value in cookies
test3
> session_unset(); #will unset all the main variables not only the values > print_r($_SESSION); #that means session array is now empty, like Array()
probar el bloque 1, 2 o 3 en individualmente comentando a otros
fuente
Creo que session_destroy () y session_unset () deben usarse al mismo tiempo para asegurarse de que los datos de la sesión se eliminen con seguridad.
fuente
session_unset()
despuéssession_destroy()
sería inútil. Úselosession_unset()
para borrar todas las claves y valores de la superglobal $ _SESSION, o usesession_destroy()
para eliminar toda la sesión; no use ambos solo para "asegurarse", confíe en que la función hará su trabajo.session_destroy()
no desarma la var superglobal sess hasta que sale de la página actual.