PHP: обнаружение страницы
У меня есть страница action.php
, на которой я запускаю SQL-запрос через код, так что всякий раз, когда просматривается страница, запрос выполняется, как , как просмотр страниц с подсчетом
<?php
mysqli_query("UPDATE ****");
?>
Проблема заключается в том, что страница обновляется, запрос выполняется, а PAGE REFRESH подсчитывается как просмотр страницы, который я хочу избежать.
Вопрос: Как этого избежать?
Я ищу простое решение, чтобы проверить
if( page was refresh ) //some condition
{
do
}
Ответы
Ответ 1
Я решил проблему... 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
?>
Ответ 2
Я нашел этот фрагмент здесь, и он отлично сработал у меня:
$pageWasRefreshed = isset($_SERVER['HTTP_CACHE_CONTROL']) && $_SERVER['HTTP_CACHE_CONTROL'] === 'max-age=0';
if($pageWasRefreshed ) {
//do something because page was refreshed;
} else {
//do nothing;
}
Ответ 3
Вы не можете напрямую обнаружить обновление страницы, но вы можете использовать cookie для имитации того, что вы хотите:
if (isset($_COOKIE['action'])) {
// action already done
} else {
setcookie('action');
// run query
}
В зависимости от ваших требований вам также необходимо решить, когда удалить cookie и/или выполнить действие еще раз.
Ответ 4
Если вы просто хотите запустить его один раз для пользователя, я бы установил cookie сеанса, а затем использовал оператор if().
<?php
session_start();
if (!$_SESSION['loaded'])
{
// insert query here
}
$_SESSION['loaded'] = true;
?>
Ответ 5
Лучший способ обнаружения обновления страницы. или нет? (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";
}
Ответ 6
Вы можете сохранить файл cookie, который будет связан с текущей страницей, и если какая-либо ссылка будет нажата, обновите файл cookie с новым именем страницы.
Предполагая, что это сделано в Javascript, вы можете отправить эту информацию updateCookie на сервер, чтобы уведомить о новом ударе страницы.
Или может быть другой подход, вы можете указать HTTP HEADER, который указывает, сколько времени срок действия кеша истекает на странице и таким образом, браузер даже не отправит вы запрашиваете загрузку/обновление страницы.
Смотрите http://www.mnot.net/cache_docs/#IMP-SCRIPT для получения информации о CACHING
Кроме того, проверьте Etag vs Expires в HTTP - ETag vs Header Expires
Ответ 7
//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 not equal you set the session again to the current page.
$_SESSION['currentPage'] = $currentPage;
//set the query you want to use
}
Ответ 8
Вот определение обновления страницы, используя простой сеанс, попробуйте
<?php
session_start();
if (!empty($_SESSION['count']))
{
session_destroy();
//Code to run on Page Refresh
}
else
$_SESSION['count']=1;
?>