Как я могу определить обновление от любого другого типа изменения страницы

Я использую php-код для создания и обновления базы данных SQL, которую я, в свою очередь, использую для заполнения счетчика страниц на экране (см. Фрагмент кода ниже). Как я могу отличить обновление страницы от любого другого изменения URL, чтобы не добавлять его в мой счетчик каждый раз, когда страница обновляется? Я хочу сделать это, не помещая куки на рабочий стол моего пользователя. Заранее спасибо за помощь.

include("incPHP1.inc");
$cxn=mysqli_connect($host,$user,$password,$database)
or die ("Couldn't connect to the server.");
$result = mysqli_query($cxn, "SELECT * FROM visitors");
$counter = mysqli_num_rows($result);
$views = $counter;

Космин:

Я скопировал код, который вы написали, в первую строку моего php-кода (см. Код первой попытки ниже). Он не работал ни в IE11, ни в Firefox 55.0.3. В обоих случаях я получил сообщение об ошибке (Неустранимая ошибка: имя функции должно быть строкой в ​​D: \ InetPub \ vhosts \ rlcdev.com \ httpdocs \ index.php в строке 2) и не выводить. Я удалил начальное $ session_name (); командной строки и пропустил ее (см. код второй попытки ниже). Это потому, что я понимаю, что $ session_start (); команда должна быть первой строкой после

Первая попытка:

<?php
$session_name();
$session_start();
$_SESSION['refresh'] = isset($_SERVER['HTTP_CACHE_CONTROL'])  && $_SERVER

['HTTP_CACHE_CONTROL'] === 'max-age=0';
if($_SESSION['refresh'])
{
echo ("<SCRIPT>alert ( 'Page has been refreshed, The AJAX call was not made');</SCRIPT>");
}
else
{
echo ("<SCRIPT>alert ( 'This is a non-refresh reload' );</SCRIPT>");
}

Вторая попытка:

<?php
$session_start();
$_SESSION['refresh'] = isset($_SERVER['HTTP_CACHE_CONTROL'])  && $_SERVER

['HTTP_CACHE_CONTROL'] === 'max-age=0';
if($_SESSION['refresh'])
{
echo ("<SCRIPT>alert ( 'Page has been refreshed, The AJAX call was not made');</SCRIPT>");
}
else
{
echo ("<SCRIPT>alert ( 'This is a non-refresh reload' );</SCRIPT>");
}

0

Решение

Используйте куки.

В вашем случае установите файл cookie с именем, которое вы предпочитаете, и значением, которое вы предпочитаете (уже_видится = 1) со сроком действия в течение жизни (7 лет). Затем вы можете проверить, отправлен ли этот файл cookie браузером. Если браузер отправил значение cookie, тогда это обновление, в противном случае, если значение cookie не отправлено браузером, тогда это первый визит.

Примечание. Этот метод зависит от файлов cookie. Вы можете отслеживать, принимаются ли файлы cookie в браузере. Нет возможности проверить это, если куки отключены в браузере.

0

Другие решения

Вот еще один метод:
используйте переменную флага

$refresh = isset($_SERVER['HTTP_CACHE_CONTROL'])  && $_SERVER['HTTP_CACHE_CONTROL'] === 'max-age=0';
if($refresh)
{
echo ("<SCRIPT>alert ( 'Page has been refreshed, The AJAX call was not made');</SCRIPT>");
}
else
{
echo ("<SCRIPT>alert ( 'This is a non-refresh reload' );</SCRIPT>");
}
0

Все еще не работал, Космин. Я решил пойти другим путем, используя базу данных SQL, таймеры и Ajax-вызовы, чтобы определить, является ли этот вызов обновлением или новым. Это поможет с некоторыми другими проблемами, которые я пытаюсь решить. Спасибо за помощь.

0
По вопросам рекламы [email protected]