2010-05-29 1 views
2

Когда пользователь нажимает на кнопку выхода из системы, я подключиться к сценарию, который просто делает этотли сессия Destory не достаточно, чтобы очистить сеанс

session_destroy(); 
session_start(); 

я думал, что это будет достаточно, чтобы сбросить все $_SESSION переменные, такие как $_SESSION['logged'] и $_SESSION['username'], но когда я снова загружаю страницу, она автоматически регистрирует меня, как будто сеанс по-прежнему активен.

ответ

9

Как documentation explains:

Это не снята с охраны любого из глобальных переменных, связанных с сеансом или снята с сессионной куки. Чтобы снова использовать переменные сеанса, необходимо вызвать session_start().

Чтобы убить сеанс вообще, как и для выхода из системы, идентификатор сеанса также должен быть отменен. Если для распространения идентификатора сеанса (поведение по умолчанию) используется куки-файл, необходимо удалить куки-файл сеанса. Для этого может использоваться 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(); 
?> 

Просто очистив массив достаточен для входа пользователя вне; они все еще имеют один и тот же идентификатор сеанса, но $_SESSION будет пустым, так $_SESSION['logged'] и $_SESSION['username'] не будут существовать

+0

Спасибо, Майкл, сделал это. – Kamo

1

Несомненно, у вас будет только $ SESSION_DESTROY(); самостоятельно, без $ SESSION_START(); на странице выхода из системы?

+0

Вы не можете даже сделать это, PHP выдает 'Warning: session_destroy(): Попытка уничтожить неинициализированный session'. И это не решило бы его проблему в любом случае –

+0

. Мой плохой, должен был сказать, что он вернулся к фронту. – duckbox

0

Вы должны использовать Page_Init() событие для проверки переменного сеанса связи пользователей. Если вы проверите переменную сеанса пользователя при загрузке страницы, она покажет вам как активный сеанс. Существует единственный способ, которым вы можете проверить пользователи сессии на Page_Init() событие следующим образом ..

protected void Page_init(object sender, EventArgs e) 
    { 
     if (Session["User"] == null) 
     { 
      Response.Redirect("home.aspx"); 
     } 
    } 

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

Спасибо

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