2010-08-18 14 views
30

He leído muchos tutoriales php para scripts de cierre de sesión, me pregunto cuál podría ser la forma correcta de cerrar sesión en una sesión.manera correcta de cerrar la sesión de una sesión en PHP

Guión 1

<?php 
session_start(); 
session_destroy(); 
header("location:index.php"); 
?> 

Guión 2

<?php 
session_start(); 
session_unset(); 
session_destroy(); 
header("location:index.php"); 
?> 

Guión 3

<?php 
session_start(); 
if (isset($_SESSION['username'])) 
{ 
    unset($_SESSION['username']); 
} 
header("location:index.php"); 
?> 

¿Hay alguna manera más efectiva de hacer esto ?? Siempre se puede crear una sesión iniciando sesión de nuevo, entonces ¿debería molestarme en usar session_destroy() y usar unset ($ _ SESSION ['variable']) en su lugar? ¿Cuál de los 3 guiones anteriores es más preferible?

+0

tener en cuenta que querrías salir() después de la redirección de cabecera para evitar exponer el contenido que podría seguir ... – Julix

Respuesta

55

Desde la página session_destroy() en el PHP manual:

<?php 
// Initialize the session. 
// If you are using session_name("something"), don't forget it now! 
session_start(); 

// Unset all of the session variables. 
$_SESSION = array(); 

// If it's desired to kill the session, also delete the session cookie. 
// Note: This will destroy the session, and not just the session data! 
if (ini_get("session.use_cookies")) { 
    $params = session_get_cookie_params(); 
    setcookie(session_name(), '', time() - 42000, 
     $params["path"], $params["domain"], 
     $params["secure"], $params["httponly"] 
    ); 
} 

// Finally, destroy the session. 
session_destroy(); 
?> 
+0

¡Gracias! Esto es muy útil – Woppi

+0

Podría explicar esta parte, por favor? '$ [" ruta "], $ params [" dominio "], $ params [" seguro "], $ params [" httponly "]);'. No entendí lo que estás haciendo aquí –

4

Session_unset(); solo destruye las variables de sesión. Para finalizar la sesión hay otra función llamada session_destroy(); que también destruye la sesión.

actualización:

Con el fin de matar a la sesión por completo, como para conectar al usuario a cabo, el id de sesión también debe ser desarmado. 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() pueden usarse para ese

+3

'session_destroy()' no toca la cookie De los documentos: 'Para terminar con la sesión en su totalidad, como 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. http://us3.php.net/manual/en/function.session-destroy.php – ircmaxell

+0

gracias ircmaxell –

9

Personalmente, lo siguiente:

session_start(); 
setcookie(session_name(), '', 100); 
session_unset(); 
session_destroy(); 
$_SESSION = array(); 

De esta manera, se mata a la cookie, destruye todos los datos almacenados internamente, y destruye la instancia actual de la información de sesión (que es ignorado por session_destroy).

+1

hace setcookie (session_name(), '', 100); publicado por @ircmaxell tendrá un mejor comportamiento que el código que @Frxstrem ha publicado? –

+2

@ La solución de Frxstrem es más completa (ya que tiene en cuenta los parámetros de cookies exactos utilizados). Usa ese en su lugar ... – ircmaxell

+0

¡Oh! lo entiendo :) –

Cuestiones relacionadas