сессия не уничтожена - PullRequest
       0

сессия не уничтожена

0 голосов
/ 21 июня 2011

у меня есть этот файл

secure.php

session_start();
if(empty($_SESSION['u_name'])) {
    header("Location:emprego.php");
}

if(isset($_GET['logout'])) {
    session_destroy();
    header("Location:emprego.php");
}

$name = $_SESSION['u_name'];

?>

<li><?php echo "<a href='emprego.php?logout' id='D'>Logout</a>";?></li>

В основном, если я выйду из системы, я буду перенаправлен на emprego.php.Но если я нажму кнопку «Назад» (стрелка в браузере), я смогу просмотреть ту же страницу (secure.php).

У меня вопрос, почему?

спасибо

Ответы [ 5 ]

2 голосов
/ 21 июня 2011

http://nl2.php.net/manual/en/function.session-destroy.php

Взгляните на пример 1 здесь. В нем четко сказано, что вы также должны очистить $ _SESSION.

if(isset($_GET['logout'])) {
    unset($_SESSION['u_name']); //makes it non-existent (it does unset) that variable
    session_destroy();
    header("Location:emprego.php");
}
0 голосов
/ 20 декабря 2018

Все остальные решения, похоже, не работают для меня. Тем не менее, этот обходной путь сделал свое дело. По сути, приведенный ниже код продолжает вызывать выход из системы до тех пор, пока он не завершится успешно:

if (isset($_GET["logout"])){
    if (isset($_SESSION["username"])) {
        unset($_SESSION["username"]);
        session_destroy();
        header("Location:/?logout=true");
        exit;
    }
    header("Location:/");
    exit;
}
0 голосов
/ 28 октября 2013

Я недавно нашел header_remove(); http://php.net/manual/en/function.header-remove.php

    Caution: This function will remove all headers set by PHP, including cookies, session and the X-Powered-By headers.

Не уверен, является ли это подходящим способом сделать это, но он довольно эффективен для выхода из системы.

0 голосов
/ 21 июня 2011

Если вы используете сеансовые куки, попробуйте также явно истечь сессионные куки, например:

if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}

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

0 голосов
/ 21 июня 2011

Ваш браузер хранит копию страницы в кеше.Когда вы нажимаете кнопку «Назад», вы видите локальную кэшированную копию, а не текущую страницу с сервера.Если ваша безопасность настроена правильно, вы не сможете сделать что-либо значимое с этой кэшированной страницы.

Именно по этой причине защищенные сайты (например, банковские сайты) говорят вам выйти из системы и очистить ее.Ваш кеш (или закройте браузер) после выхода из системы.

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