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

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

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

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

теперь проблема в том, что после выхода из системы я отключаю все переменные и уничтожаю сеанс, но даже тогда, если я нажму кнопку " Назад в браузере (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>

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

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

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)


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

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

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


Не изменяя url, поместите это в тег head.
Скрипт использует два куки:
- один для хранения, если страница была посещена
- один для хранения, если reaload был запущен

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';
    }
}

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

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

<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.


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

<body onunload="">

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