У меня есть веб-страница, требующая входа в систему. Как только пользователь вошел в систему, я запустил сеанс, и как только он выходит из системы, я его уничтожаю, но когда я нажимаю на обратную страницу, он снова дает мне страницу профиля пользователя, которая в идеале не должна быть так, как пользователь вышел из системы. Тем не менее, он отлично работает, если я перезагружаю страницу после выхода из системы.
Это местный чат, где каждый онлайн и вошедший в систему может общаться вместе. Есть три страницы: login.php
, auth.php
, logout.php
login.php
– общая страница входа, содержащая форму. auth.php
есть div
отображающий все предыдущие чаты до сих пор, текстовое поле и кнопка совместного доступа при нажатии, которое форма отправляется снова на auth.php, поэтому каждый раз, когда форма отправляется, chatpost отправляется в базу данных, а auth перезагружается последним база данных в чате div ..
Теперь проблема в том, что после выхода из системы я отключил все переменные и уничтожил сессию, но даже тогда, когда я нажму кнопку «Назад» в браузере (Safari), будет auth.php
предыдущая версия auth.php
без последней записи в чате, которая в идеале не должна быть такой, как сеанс уничтожается. Я положил проверку сеанса в 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>
Извините за длинный вопрос, но мне действительно нужна помощь в этом.
Эти заголовки заставят браузер и прокси-серверы, если таковые имеются, не кэшировать страницу и не направить новый запрос на сервер для этой страницы:
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-адрес, поместите его в тег заголовка.
В скрипте используются два файла 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'; } }
Я использую смешанное решение, так как я не нашел кросс-браузерный метод для перезагрузки страницы после нажатия на подставку.
Во-первых, я добавляю некоторые метатеги на все мои страницы:
<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 и проверьте свою проблему.