Las variables de sesión no se destruyen incluso con session_destroy ()

session_start(); $_SESSION['user'] = "789456"; $_SESSION['name'] = "dummy"; $_SESSION['id'] = "123"; print_r($_SESSION); session_destroy(); echo "Session End"; print_r($_SESSION); 

Mi salida es:

 Array ( [user] => 789456 [name] => dummy [id] => 123) Session End :Array ( [user] => 789456 [name] => dummy [id] => 123) 

¿No debería ser solo la salida?

 Array ( [user] => 789456 [name] => dummy [id] => 123) 

Si uso session_unset() antes de session_destroy() entonces obtengo el resultado que espero. ¿Siempre es necesario usar session_unset() antes de session_destroy() ?

De la documentación :

session_destroy () destruye todos los datos asociados con la sesión actual. No desarma ninguna de las variables globales asociadas con la sesión, ni desarma la cookie de sesión. Para volver a utilizar las variables de sesión, se debe invocar session_start ().

Para eliminar la sesión por completo, como para desconectar al usuario, la identificación de la sesión también debe estar desactivada. Si se usa una cookie para propagar la identificación de la sesión (comportamiento predeterminado), entonces la cookie de sesión debe ser eliminada. setcookie () se puede usar para eso.

La manera más fácil sería: $_SESSION = array(); después de llamar a session_destroy(); .

http://php.net/session_destroy

session_destroy () destruye todos los datos asociados con la sesión actual. No desarma ninguna de las variables globales asociadas con la sesión, ni desarma la cookie de sesión. Para volver a utilizar las variables de sesión, se debe invocar session_start ().

Para eliminar la sesión por completo, como para desconectar al usuario, la identificación de la sesión también debe estar desactivada. Si se usa una cookie para propagar la identificación de la sesión (comportamiento predeterminado), entonces la cookie de sesión debe ser eliminada. setcookie () se puede usar para eso.

session_destroy borra los datos del almacenamiento subyacente, pero deja $ _SESSION solo. Cuando actualice la página, estará vacía.

Lo que puede hacer, sin embargo, es simplemente hacer $ _SESSION = array (); session_destroy (); (Aunque en realidad eso es casi redundante ya que session_destroy borra los datos subyacentes, pero mantiene la misma identificación de sesión, las dos declaraciones son básicamente la misma cosa)