Перезагрузите страницу нажатием кнопки возврата

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

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

login.php - общая страница входа, содержащая форму. auth.php имеет div, отображающий все предыдущие чаты до til now, текстовое поле и кнопку совместного доступа при нажатии, которое форма отправляется снова на 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>

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

Ответ 1

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

  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

Ответ 2

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)

Ответ 3

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

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

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

Ответ 4

Не меняя URL-адрес, поместите его в заголовок.
script использует два файла 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';
    }
}

Ответ 5

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

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

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

Ответ 6

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

<body onunload="">

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