Intereting Posts
Как создать SOAP-сервис с помощью ZF2? Doctrine 2 выберите count groupBy Эхо-массивы с регулярным текстом WooCommerce – Скрыть другие способы доставки, когда доступна БЕСПЛАТНАЯ ДОСТАВКА Найти субдомен, используя регулярное выражение в PHP Правильное предотвращение почтовой инъекции в PHP Как вызвать динамические методы в php? отправлять электронную почту с прикрепленными файлами в ZF2 Композитор, игнорирующий файл компоновщика zip dependecies 'composer.json Как сортировать строки таблицы HTML, вызываемые из MySQL toggle () div с отправкой данных формы как использовать функцию islocationOnEdge для поиска координат на / возле пути google-карт api на стороне сервера Невозможно реализовать два интерфейса, которые имеют одно и то же имя метода Можно ли включить «Уведомление: попытка получить свойство не объекта» в фатальную ошибку? Pinging test.dev после установки Laravel Valet возвращает «Неизвестный хост»

PHP: обнаружение страницы

У меня есть страница action.php на которой я запускаю SQL-запрос через код, так что всякий раз, когда просматривается страница, запрос выполняется так же, как и просмотры страниц подсчета

 <?php mysqli_query("UPDATE ****"); ?> 

Проблема заключается в том, когда страница обновляется, запрос запускается и PAGE REFRESH засчитывается как ПРОСМОТР СТРАНИЦЫ, которого я хочу избежать.

Вопрос: Как этого избежать?

То, что я ищу, – это простое решение, чтобы я мог проверить

 if( page was refresh ) //some condition { do } 

Я нашел этот фрагмент здесь , и он отлично сработал для меня:

 $pageWasRefreshed = isset($_SERVER['HTTP_CACHE_CONTROL']) && $_SERVER['HTTP_CACHE_CONTROL'] === 'max-age=0'; if($pageWasRefreshed ) { //do something because page was refreshed; } else { //do nothing; } 

Вы не можете напрямую обнаружить обновление страницы, но вы можете использовать cookie для имитации того, что вы хотите:

 if (isset($_COOKIE['action'])) { // action already done } else { setcookie('action'); // run query } 

В зависимости от ваших требований вам также необходимо решить, когда нужно удалить cookie и / или выполнить действие еще раз.

Если вы просто хотите запустить его один раз для пользователя, я бы установил cookie сеанса, а затем использовал оператор if ().

 <?php session_start(); if (!$_SESSION['loaded']) { // insert query here } $_SESSION['loaded'] = true; ?> 

я решил проблему … HURRAHHH без сеанса и без файлов cookie

решение представляет собой комбинацию PHP: AJAX: JavaScript

запрос, который вы хотите запустить на странице «Загрузка страницы», а не на странице «Обновить». Запустите его, как через вызов AJAX, можно сказать, что моя функция для этого

 function runQUERY() { xmlhttp=new XMLHttpRequest(); xmlhttp.open("POST","doIT.php",false); xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xmlhttp.send(); } 

и я могу просто проверить с помощью Javascript, что страница представляет собой новую загрузку или ее обновление, выполнив следующие

 <head> <script type="text/javascript"> function checkRefresh() { if( document.refreshForm.visited.value == "" ) { // This is a fresh page load alert ( 'Fresh Load' ); document.refreshForm.visited.value = "1"; ..call you AJAX function here } else { // This is a page refresh alert ( 'Page has been Refreshed, The AJAX call was not made'); } } </script> </head> <body onLoad="checkRefresh()"> <form name="refreshForm"> <input type="hidden" name="visited" value="" /> </form> </body> </html> 

и в вашем doIT.php просто добавьте свой PHP-код, который вы собираетесь разместить на обычной странице

 <?php mysql_query("UPDATE---------"); //put any code here, i won't run on any page refresh ?> 

Лучший способ обнаружения обновления страницы. или нет? ( Ctrl + F5 , F5 , Ctrl + R , Enter )

 $pageRefreshed = isset($_SERVER['HTTP_CACHE_CONTROL']) &&($_SERVER['HTTP_CACHE_CONTROL'] === 'max-age=0' || $_SERVER['HTTP_CACHE_CONTROL'] == 'no-cache'); if($pageRefreshed == 1){ echo "Yes page Refreshed"; }else{ //enter code here echo "No"; } 

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

Или может быть другой подход, вы можете указать HTTP HEADER, который определяет, сколько времени истекает кэш на странице и тому подобное, браузер даже не отправит вам запрос о загрузке / обновлении страницы .

См. http://www.mnot.net/cache_docs/#IMP-SCRIPT для получения информации о CACHING

Кроме того, проверьте Etag vs Expires в HTTP – ETag vs Header Expires

  //here you get the url behind the domain. $currentPage = $_SERVER['REQUEST_URI']; //if the session current page is not set. if(!isset($_SESSION['currentPage'])){ //set the session to the current page. $_SESSION['currentPage'] = $currentPage; } //check if the session is not equal to the current page if($_SESSION['currentPage'] != $currentPage){ // if it's not equal you set the session again to the current page. $_SESSION['currentPage'] = $currentPage; //set the query you want to use } 

Вот определение обновления страницы с помощью простого сеанса, попробуйте

 <?php session_start(); if (!empty($_SESSION['count'])) { session_destroy(); //Code to run on Page Refresh } else $_SESSION['count']=1; ?>