Определите, обновляется ли браузер или нет с помощью PHP

StackOverflow https://stackoverflow.com/questions/456841

  •  19-08-2019
  •  | 
  •  

Вопрос

Я хочу определить, обновляется ли браузер или нет с помощью PHP, и, если браузер обновляется, какой конкретный код PHP должен выполняться.

Это было полезно?

Решение

Если страница была обновлена, можно ожидать, что два следующих друг за другом запроса будут относиться к одному и тому же URL (путь, имя файла, строка запроса) и к одному и тому же содержимому формы (если есть) (данные POST). Это может быть довольно много данных, поэтому лучше всего их хешировать. Итак ...


<?php
session_start();

//The second parameter on print_r returns the result to a variable rather than displaying it
$RequestSignature = md5($_SERVER['REQUEST_URI'].$_SERVER['QUERY_STRING'].print_r($_POST, true));

if ($_SESSION['LastRequest'] == $RequestSignature)
{
  echo 'This is a refresh.';
}
else
{
  echo 'This is a new request.';
  $_SESSION['LastRequest'] = $RequestSignature;
}

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

Другие советы

Когда пользователь нажимает кнопку обновления, в браузере появляется дополнительный заголовок, который появляется в массиве $ _SERVER.

Проверьте кнопку обновления, используя следующее:

    $refreshButtonPressed = isset($_SERVER['HTTP_CACHE_CONTROL']) && 
                            $_SERVER['HTTP_CACHE_CONTROL'] === 'max-age=0';
<?php

    session_start();
    if (!isset($_SESSION["visits"]))
        $_SESSION["visits"] = 0;
    $_SESSION["visits"] = $_SESSION["visits"] + 1;

    if ($_SESSION["visits"] > 1)
    {
        echo "You hit the refresh button!";
    }
    else
    {
        echo "This is my site";
    }

    // To clear out the visits session var:
    // unset($_SESSION["visits"]);

?>

Если вы имеете в виду, что вы хотите различать, когда пользователь впервые заходит на страницу, и когда он перезагружает страницу, проверьте реферера. В php это: $ _SERVER [& Quot; HTTP_REFERER & Quot;]. Посмотрите, равна ли она странице, на которой работает ваш скрипт. Может случиться, что клиент не предоставляет эту информацию, если это произойдет, вы можете установить cookie или переменную сеанса для отслеживания того, какой была последняя запрошенная страница.

Чтобы предотвратить дублирование обработки формы, когда пользователь нажимает кнопку обновления или возврата браузера, необходимо использовать переменную сеанса id экземпляра страницы и скрытый ввод формы, который содержит эту переменную. когда они не совпадают, пользователь обновил страницу, и вам не следует повторно обрабатывать форму. подробности см .:

https://www.spotlesswebdesign.com/blog.php?id=11

Если кто-то обновит страницу, будет отправлен тот же запрос, что и предыдущий. Поэтому вам следует проверить, совпадает ли текущий запрос с последним. Это можно сделать следующим образом:

session_start();

$pageRefreshed = false;
if (isset($_SESSION['LAST_REQUEST']) && $_SERVER['REQUEST_URI'] === $_SESSION['LAST_REQUEST']['REQUEST_URI']) {
    if (isset($_SERVER['HTTP_REFERER'])) {
         // check if the last request’s referrer is the same as the current
         $pageRefreshed = $_SERVER['HTTP_REFERER'] === $_SESSION['LAST_REQUEST']['HTTP_REFERER'];
    } else {
         // check if the last request didn’t have a referrer either
         $pageRefreshed = $_SERVER['HTTP_REFERER'] === null;
    }
}

// set current request as "last request"

$_SERVER['LAST_REQUEST'] = array(
    'REQUEST_URI'  => $_SERVER['REQUEST_URI'],
    'HTTP_REFERER' => isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null
);

Я не & # 8217; t проверил это, но оно должно работать.

scroll top