Недостаточно ли уничтожить сеанс для очистки сеанса - PullRequest
2 голосов
/ 30 мая 2010

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

session_destroy();
session_start();

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

Ответы [ 3 ]

9 голосов
/ 30 мая 2010

Как объясняется в документации :

Не сбрасывает глобальные переменные, связанные с сеансом, и не сбрасывает cookie сеанса. Чтобы снова использовать переменные сеанса, необходимо вызвать session_start ().

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

1 голос
/ 30 мая 2010

Конечно, у вас просто будет $ SESSION_DESTROY ();сам по себе, без $ SESSION_START ();на странице выхода?

0 голосов
/ 26 апреля 2012

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

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

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

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...