Перезагрузить страницу при нажатии кнопки назад - PullRequest
8 голосов
/ 05 сентября 2010

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

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

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

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

iпытался

<?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 ]

10 голосов
/ 22 мая 2011
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 addon для FF)

6 голосов
/ 05 сентября 2010

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

  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
4 голосов
/ 03 июня 2014

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

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

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

0 голосов
/ 26 октября 2015

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

<body onunload="">

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

0 голосов
/ 30 ноября 2014

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

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

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

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

0 голосов
/ 11 марта 2012

Не изменяя 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';
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...