Intereting Posts
Zend_Test в Action_Helper для доступа к ошибке $ bootstrap-> getOptions () Оператор PHP IF для булевых значений: $ var === true vs $ var Вставка в базу данных с использованием функции onclick Профилирование приложений: использование памяти Каковы преимущества программирования OO? Помогло бы мне написать лучший код? Можете ли вы порекомендовать хорошую разработку графических диаграмм на основе php Gantt? Как удалить запись в php, которая имеет составной (многоколоночный) первичный ключ Как отслеживать, откуда Magento вызывает шаблоны? получать последовательные записи в mysql Вызов неопределенного метода mysqli_stmt :: get_result () И установлен mysqlnd как отправлять данные JSON с Android на php url? PHP https отправляет XML-данные с помощью cURL Когда и где работает JavaScript, как насчет PHP? Могу ли я объединить два? Как я могу дезинформировать свои заявления о включении? Как расшифровать строку с помощью OpenSSL, которая ранее была зашифрована с помощью mcrypt?

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

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

Это местный чат, где каждый онлайн и вошедший в систему может общаться вместе. Есть три страницы: 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 и проверьте свою проблему.