2010-08-18 5 views
30

Я прочитал много php-руководств для скриптов выхода из системы, я задаюсь вопросом, что может быть правильным способом выхода из сеанса!правильный способ выхода из сеанса в PHP

Сценарий 1

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

Сценарий 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"); 
?> 

Есть ли более эффективный способ сделать это ?? Сессия всегда может быть создана путем входа в систему, поэтому я должен беспокоиться об использовании session_destroy() и вместо этого использовать unset ($ _ SESSION ['variable'])? какой из этих трех сценариев более предпочтителен?

+0

иметь в виду, вы хотите выйти() после редиректа заголовка, чтобы не подвергать содержимое, которое может последовать ... – Julix

ответ

55

С session_destroy() страницы в 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

Спасибо! Это очень полезно. – Woppi

+0

Не могли бы вы объяснить эту часть? '$ [" path "], $ params [" domain "], $ params [" secure "], $ params [" httponly "]);'. Я не понял, что вы здесь делаете –

4

Session_unset(); только уничтожает переменные сеанса. Для завершения сеанса есть еще одна функция, называемая session_destroy();, которая также разрушает сеанс.

обновление:

Для того, чтобы убить сессию в целом, как для входа пользователя вне, идентификатор сессии должен быть снят с охраной. Если для распространения идентификатора сеанса (поведение по умолчанию) используется куки-файл, необходимо удалить куки-файл сеанса. setcookie() может быть использован для того

+3

'session_destroy()' не касается печенья. Из документов: 'Чтобы вообще убить сеанс, как и для выхода из системы, идентификатор сеанса также должен быть отменен. Если для распространения идентификатора сеанса (поведение по умолчанию) используется куки-файл, необходимо удалить куки-файл сеанса. setcookie() может быть использован для этого. 'http://us3.php.net/manual/en/function.session-destroy.php – ircmaxell

+0

thanks ircmaxell –

9

Лично я следующее:

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

Таким образом, он убивает печенье, уничтожает все данные, хранящиеся внутри, и уничтожает текущий экземпляр информации сеанса (который игнорируется session_destroy).

+1

делает setcookie (session_name(), '', 100); отправленный @ircmaxell, будет лучше, чем код, который @Frxstrem опубликовал? –

+2

@ Решение Frxstrem более полно (поскольку оно учитывает точные параметры файла cookie). Используйте это вместо ... – ircmaxell

+0

Oh! я получаю это :) –

Смежные вопросы