5

PHP を使用してブラウザーが更新されているかどうか、およびブラウザーが更新されている場合は、どの特定の PHP コードを実行する必要があるかを検出したいと考えています。

4

6 に答える 6

13

ユーザーが更新ボタンを押すと、ブラウザーは $_SERVER 配列に表示される追加のヘッダーを含めます。

以下を使用して更新ボタンをテストします。

    $refreshButtonPressed = isset($_SERVER['HTTP_CACHE_CONTROL']) && 
                            $_SERVER['HTTP_CACHE_CONTROL'] === 'max-age=0';
于 2011-05-25T16:29:33.810 に答える
13

ページが更新された場合、相互に続く 2 つの要求は、同じ 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 署名を更新しないように、このコードをどのファイルに配置するかに注意する必要があります。

于 2009-01-19T08:47:45.717 に答える
2
<?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"]);

?>
于 2009-01-19T08:15:20.603 に答える
1

ユーザーがブラウザーの更新ボタンまたは戻るボタンを押したときにフォーム処理が重複しないようにするには、ページ インスタンス ID セッション変数と、その変数を含む非表示のフォーム入力を使用する必要があります。2 つが一致しない場合は、ユーザーがページを更新したため、フォームを再処理しないでください。詳細については、以下を参照してください。

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

于 2010-12-31T22:33:45.430 に答える
1

ユーザーが最初にページにアクセスしたときと、ページをリロードしたときを区別したい場合は、リファラーを確認してください。PHP では、$_SERVER["HTTP_REFERER"] です。スクリプトが実行されているページと等しいかどうかを確認してください。クライアントがこの情報を提供しない場合があります。その場合は、Cookie またはセッション変数を設定して、最後に要求されたページが何であったかを追跡できます。

于 2009-01-19T08:08:26.497 に答える
0

誰かがページを更新すると、前のリクエストと同じリクエストが送信されます。そのため、現在のリクエストが最後のリクエストと同じかどうかを確認する必要があります。これは次のように行うことができます。

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
);

私はそれをテストしていませんが、動作するはずです。

于 2009-01-19T15:31:26.133 に答える