У меня есть страница 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; ?>