2010-10-16 3 views
30

Достаточно лиЛучший способ полностью уничтожить сеанс - даже если браузер не закрыт

session_start(); // Must start a session before destroying it 

if (isset($_SESSION)) 
{ 
    unset($_SESSION); 
    session_unset(); 
    session_destroy(); 
} 

, когда пользователь выбирает Log out из меню, но не бросить его браузер? Я хочу, чтобы полностью удалить все существование сессии и $_SESSION

+4

Я не 'снята с охраны ($ _ SESSION);' 'Перед session_destroy()', то это может быть, что session_destroy не может работать должным образом –

ответ

60

Согласно manual, есть больше, чтобы сделать:

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

В руководстве есть полный рабочий пример о том, как это сделать. Похищенные оттуда:

<?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(); 
?> 
+6

почему бы не использовать 'session_unset' вместо' $ _SESSION = array(); '? – alexw

+0

Я тестировал здесь, и вы можете использовать unset ($ _ SESSION) или присваивать значение null переменной $ _SESSION или пустой массив, как это сделал Пекка! – Zanoldor

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