пользователь может вернуться в IE после выхода, нажав кнопку назад - PullRequest
0 голосов
/ 28 июля 2010

Я использую скрипт входа в систему PHP, который запрашивает у пользователя имя пользователя и пароль.

После аутентификации программа сохраняет значение сеанса.При выходе из системы значение сеанса устанавливается как пустое.

Вот проблема:

В IE 8 (не Firefox) пользователь может несколько раз нажать кнопку назад, покаЭкран с сообщением «Срок действия веб-страницы истек».Скорее всего, это экран входа в систему.

Если он нажмет F5, похоже, что имя пользователя и пароль все еще остаются в переменных POST, и он снова входит в систему.

Ответы [ 3 ]

0 голосов
/ 28 июля 2010

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

0 голосов
/ 28 июля 2010

после того, как вы разместите форму входа и подтвердите / login / все, сделайте header('location:someOtherPage.php) перенаправление на другую страницу.Тогда форма не сможет быть повторно опубликована нажатием клавиши f5.Например:

//login.php
<?php
//no cache headers if you want.
session_start();
if(isset($_POST) && !empty($_POST)){
    //validate user & pass. if valid set session then...
    if(is_valid_user()){
        //set session
        $_SESSION['loggedIn'] = true;
        //close session. this prevents problems with vars not
        //setting when using a header redirect because you redirect
        //before the session file can write.
        session_write_close();
        //redirect to another page
        header('location:loggedIn.php');
        //stop the script from running
        exit;
    } else {
        echo "<div class='error'>Login failed.</div>";
    } 
}
//echo login form.

?>

перенаправление заголовка не отображается в истории, поэтому при повторном нажатии они не увидят страницу, позволяющую повторно опубликовать форму.

0 голосов
/ 28 июля 2010

Похоже, что вы на самом деле не удаляете сеанс на сервере, скорее, вы очищаете sessionID в URL (или чем-то) на клиенте.Таким образом, когда нажата кнопка, она пытается повторно передать идентификатор сеанса, и ваш сервер принимает его.загружается из кеша.Когда они принудительно обновляют, он перезагружает страницу без переменных.

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