2010-08-18 13 views
30

Przeczytałem wiele tutoriali php dla skryptów wylogowania, zastanawiam się, jaki może być właściwy sposób na wylogowanie się z sesji!Właściwy sposób na wylogowanie się z sesji w PHP

Script 1

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

Script 2

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

Script 3

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

Czy istnieje bardziej skuteczny sposób to zrobić ?? Sesja zawsze może zostać utworzona przez ponowne zalogowanie się, więc czy powinienem zawracać sobie głowę wykorzystaniem use session_destroy() i zamiast tego użyć unset ($ _ SESSION ['variable'])? który z powyższych 3 skryptów jest bardziej preferowany?

+0

utrzymać na uwadze, że chcesz wyjść() po przekierowaniu nagłówka, aby uniknąć narażania treści, które mogą wynikać ... – Julix

Odpowiedz

55

Na stronie session_destroy() w 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

Dziękuję! Jest to bardzo przydatne. – Woppi

+0

Czy mógłbyś wyjaśnić tę część? '$ [" ścieżka "], $ params [" domena "], $ params [" secure "], $ params [" httponly "]);'. Nie dostałem tego, co tu robisz –

4

Session_unset(); tylko niszczy zmienne sesji. Aby zakończyć sesję, istnieje inna funkcja o nazwie session_destroy();, która również niszczy sesję.

zmiana:

W celu zabicia sesję całkowicie, tak jak do zalogowania się użytkownika, identyfikator sesji musi być wyłączony. Jeśli plik cookie jest używany do propagowania identyfikatora sesji (zachowanie domyślne), plik cookie sesji musi zostać usunięty. setcookie() mogą być wykorzystywane do tego

+3

'session_destroy()' nie dotyka pliku cookie. Z dokumentów: 'Aby całkowicie zabić sesję, podobnie jak zalogować użytkownika, identyfikator sesji musi również zostać anulowany. Jeśli plik cookie jest używany do propagowania identyfikatora sesji (zachowanie domyślne), plik cookie sesji musi zostać usunięty. setcookie() może być używany do tego. "http://us3.php.net/manual/en/function.session-destroy.php – ircmaxell

+0

dzięki ircmaxell –

9

Osobiście wykonaj następujące czynności:

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

ten sposób zabija cookie, niszczy wszystkie dane przechowywane wewnętrznie i niszczy bieżące wystąpienie informacje sesji (co jest ignorowane przez session_destroy).

+1

robi setcookie (session_name(), '', 100); wysłane przez @ircmaxell będzie miało lepsze zachowanie niż kod, który opublikował @Frxstrem? –

+2

@ Rozwiązanie Frxstrem jest bardziej kompletne (ponieważ bierze pod uwagę dokładnie używane parametry ciasteczek). Użyj tego zamiast ... – ircmaxell

+0

Och! rozumiem :) –

Powiązane problemy