Перезагрузить страницу при нажатии кнопки «Назад»

У меня есть веб-страница, которая требует авторизации. Как только пользователь вошел в систему, я начинаю сеанс, и как только он выходит из системы, я уничтожаю его, но когда я нажимаю последнюю страницу, он снова дает мне страницу профиля пользователя, чего в идеале не должно быть, поскольку пользователь вышел из системы. Однако он отлично работает, если я перезагружаю страницу после выхода из системы.

Это локальный чат, где все онлайн и вошедшие в систему могут общаться друг с другом. Есть три страницы: login.php, auth.php, logout.php

login.php — это общая страница входа, содержащая форму. auth.php имеет div отображение всех предыдущих чатов до сих пор, текстовое поле и кнопку «Поделиться», при нажатии которой форма снова отправляется на auth.php, поэтому каждый раз, когда форма публикуется, сообщение чата отправляется в базу данных, а авторизация перезагружается с последней базой данных в пределах чат раздел..

Теперь проблема в том, что когда я выхожу из системы, я сбрасываю все переменные и уничтожаю сеанс, но даже тогда, если я нажму кнопку «Назад» в браузере (Safari), предыдущая версия auth.php без последней записи чата будет видна, что в идеале не должно быть как сеанс уничтожен. Я поместил проверку сеанса в auth.php, поэтому в основном я хочу, чтобы auth.php перезагружала пользователя, посещающего его после выхода из системы, поскольку перезагрузка auth.php показывает, что «вы не вошли в систему»

я пытался

<?php header("Cache-Control: no-cache");
header("Pragma: no-cache");
?>
and
<head>
<meta http-equiv='Pragma' content='no-cache'>
<meta http-equiv='Expires' content='-1'>
</head>

Извините за длинный вопрос, но мне действительно нужна помощь в этом.


person tushar    schedule 05.09.2010    source источник
comment
Совет: используйте правильную грамматику, чтобы объяснить свою проблему, а не 1 длинное предложение; это повысит шансы того, что кто-то действительно захочет прочитать это.   -  person Alec    schedule 05.09.2010
comment
@Alec, его грамматика верна, за исключением опечатки, я хочу, чтобы auth.php перезагрузил of пользователь посещает его после выхода из системы. @tushar разбейте свой вопрос на абзацы, чтобы улучшить читаемость   -  person Sandeepan Nath    schedule 05.09.2010
comment
это очень странно, вы используете функцию PHP session_start() для создания сеанса на странице входа? Если да, он уже должен позаботиться об отправке правильного заголовка, чтобы браузер не кэшировал страницу (см. Мой ответ). В каком браузере вы это тестировали?   -  person Marco Demaio    schedule 22.05.2011


Ответы (6)


Эти заголовки заставят браузер и прокси-серверы, если они есть, не кэшировать страницу и принудительно отправить новый запрос на сервер для этой страницы:

  header("Cache-Control: private, must-revalidate, max-age=0");
  header("Pragma: no-cache");
  header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // A date in the past
person aularon    schedule 05.09.2010
comment
это также уничтожает все переменные сеанса - person tushar; 05.09.2010
comment
потому что, когда я начинаю сеанс, я делаю $_session['logged']=1 - person tushar; 05.09.2010
comment
теперь, когда я ввел вышеуказанный код после перезагрузки страницы, его значение равно нулю - person tushar; 05.09.2010
comment
Нет, это не делает сеанс недействительным, сеанс поддерживается на стороне сервера с ключом cookie на стороне клиента, этот код не влияет ни на то, ни на другое. может быть, это значение изменяется в другом месте, но теперь проблема проявляется, потому что он перезагружается? - person aularon; 05.09.2010

header("Expires: Thu, 19 Nov 1981 08:52:00 GMT"); //Date in the past
header("Cache-Control: no-store, no-cache, must-revalidate"); //HTTP/1.1

Это работает для меня на FF3.6, IE7, IE8, Chrome5 (при нажатии кнопки браузера назад/вперед страница всегда ПЕРЕЗАГРУЖАЕТСЯ)

Другое решение — отправлять точно такие же заголовки, отправленные функцией session_start(), очень похожие на приведенные выше, но даже более богатые:

header("Expires: Thu, 19 Nov 1981 08:52:00 GMT"); //Date in the past
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0"); //HTTP/1.1
header("Pragma: no-cache");

ПРИМЕЧАНИЕ: кроме того, заказ, показанный здесь, ТАКОЙ же, что и заказ, отправленный session_start() (вы можете проверить это с помощью HttpFox дополнение для FF)

person Marco Demaio    schedule 22.05.2011
comment
Спасибо. Работает как шарм. - person Thang Nguyen; 08.12.2018

Для чистого решения javascript просто добавьте это в свой HTML:

<input id="alwaysFetch" type="hidden" />
<script>
    setTimeout(function () {
        var el = document.getElementById('alwaysFetch');
        el.value = el.value ? location.reload() : true;
    }, 0);
</script>

Код просто присваивает скрытому вводу значение, которое останется после нажатия кнопки «Назад». Затем это используется для определения того, устарела ли страница, и в этом случае она перезагружается.

person Community    schedule 03.06.2014

Не изменяя URL-адрес, поместите его в тег заголовка.
Скрипт использует два файла cookie:
— один для сохранения, если страница была посещена
— один для сохранения, если была запущена повторная загрузка

if(navigator.cookieEnabled){    
    var visited=0;
    var refreshing=0;
    if(Get_Cookie('visited')) {
        visited=parseInt(Get_Cookie('visited'));
    }
    if (Get_Cookie('refreshing')) {
        refreshing=parseInt(Get_Cookie('refreshing'));
    }
    if(visited==1){
        if(refreshing==0){
             window.document.cookie = 'refreshing=1';
             window.location.reload();
        }else{
             window.document.cookie = 'refreshing=0';
        }
    }else{
        window.document.cookie = 'visited=1';
    }
}
person Hatzegopteryx    schedule 11.03.2012

Я использую смешанное решение, так как не нашел кросс-браузерного метода для перезагрузки страницы после нажатия кнопки «Назад».

Во-первых, я добавляю несколько метатегов на все свои страницы:

<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="no-cache">
<meta http-equiv="Expires" content="-1">
<meta http-equiv="Cache-Control" content="no-cache">

Во-вторых, я добавляю следующий javascript в тег на всех своих страницах:

<script type="text/javascript">    
// If persisted then it is in the page cache, force a reload of the page.
        window.onpageshow =function(event){
            if(event.persisted){        
                document.body.style.display ="none";        
                location.reload();
            }
        };
</script>

Я применяю это исправление на одном из своих веб-сайтов, и оно отлично работает в IE 10, Safari и Chrome.

person Leon    schedule 30.11.2014

Я пробовал много решений, но мне помогла эта простая строка кода.

<body onunload="">

Добавьте событие выгрузки с тегом body и проверьте свою проблему.

person Shwet    schedule 26.10.2015