46

自分のサイトで使用したいのです$_SERVER['HTTP_REFERER']が、次のようになります。

Notice: Undefined index: HTTP_REFERER 

印刷してみまし$_SERVERた。これにより、次のように出力されます。

Array
(
    [HTTP_HOST] => 192.168.1.10
    [HTTP_USER_AGENT] => Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0
    [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    [HTTP_ACCEPT_LANGUAGE] => en-us,en;q=0.5
    [HTTP_ACCEPT_ENCODING] => gzip, deflate
    [HTTP_CONNECTION] => keep-alive
    [PATH] => /sbin:/usr/sbin:/bin:/usr/bin
    [SERVER_SIGNATURE] => Apache/2.2.3 (CentOS) Server at 192.168.1.10 Port 80
    [SERVER_SOFTWARE] => Apache/2.2.3 (CentOS)
    [SERVER_NAME] => 192.168.1.10
    [SERVER_ADDR] => 192.168.1.10
    [SERVER_PORT] => 80
    [REMOTE_ADDR] => 192.168.1.77
    [DOCUMENT_ROOT] => /var/www/html
    [SERVER_ADMIN] => root@localhost
    [SCRIPT_FILENAME] => /var/www/html/sandeep/test/hash.php
    [REMOTE_PORT] => 53851
    [GATEWAY_INTERFACE] => CGI/1.1
    [SERVER_PROTOCOL] => HTTP/1.1
    [REQUEST_METHOD] => GET
    [QUERY_STRING] => 
    [REQUEST_URI] => /sandeep/test/hash.php
    [SCRIPT_NAME] => /sandeep/test/hash.php
    [PHP_SELF] => /sandeep/test/hash.php
    [REQUEST_TIME] => 1347365919
)

HTTP_REFERER誰かが私が代替案を見つけたり提案したりするのを手伝ってもらえますHTTP_REFERERか?

4

6 に答える 6

49

ドキュメントから:

ユーザーエージェントを現在のページに参​​照させたページのアドレス(存在する場合)。これは、ユーザーエージェントによって設定されます。すべてのユーザーエージェントがこれを設定するわけではなく、HTTP_REFERERを機能として変更する機能を提供するものもあります。要するに、それは本当に信頼できるものではありません。

http://php.net/manual/en/reserved.variables.server.php

于 2012-09-11T12:26:04.853 に答える
36

WebブラウザがあるWebサイトから別のWebサイトに移動するとき、およびWebサイトのページ間を移動するとき、オプションで元のURLを渡すことができます。これはHTTP_REFERERと呼ばれるため、あるページから別のページにリダイレクトしないと、欠落している可能性があります

HTTP_REFERERが設定されている場合は、それが表示されます。そうでない場合は、何も表示されません。設定されておらず、通知を表示するようにエラーレポートが設定されている場合は、代わりに次のようなエラーが表示されます。

 Notice: Undefined index: HTTP_REFERER in /path/to/filename.php

通知がオンになっているときにこのエラーを防ぐには(私は常に通知をオンにして開発します)、次のようにします。

  if(isset($_SERVER['HTTP_REFERER'])) {
      echo $_SERVER['HTTP_REFERER'];
   }

また

 echo isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';

$ _SERVER ['HTTP_REFERER']スーパーグローバル変数を使用して、ロギングなどの目的でHTTP_REFERER変数を使用すると便利な場合があります。ただし、常に設定されているとは限らないことを知っておくことが重要です。通知をオンにしてプログラムする場合は、コードでこれを許可する必要があります。

于 2012-09-11T12:24:53.460 に答える
11

リファラーは必須のヘッダーではありません。そこにある場合とない場合があり、変更/架空のものである可能性があります。ご自身の責任でそれを信頼してください。とにかく、未定義のインデックスエラーが発生しないように、呼び出しをラップする必要があります。

$server = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : "";
于 2012-09-11T12:26:20.697 に答える
9

あなたはそれが存在すると仮定することができ、決してそうすべきではありません$_SERVER['HTTP_REFERER']

前のページを制御する場合は、URLをパラメーターとして渡すことができます"site.com/page2.php?prevUrl=".urlencode("site.com/page1.php")

あなたがページをコントロールしなければ、あなたにできることは何もありません。

于 2012-09-11T12:24:35.220 に答える
3

解決

他の人がよく言っているように、HTTP_REFERERはユーザーのローカルマシン、特にブラウザによって設定されます。つまり、セキュリティの信頼性は高くありません。ただし、これは完全にGoogle Analyticsが訪問者をどこから取得しているかを監視する方法であるため、実際には、チェック、除外、含めるなどが役立つ場合があります。

HTTP_REFERERが表示されるべきであり、表示されない場合は、PHPコードに、できれば上部に追加してください。

ini_set('session.referer_check', 'TRUE');

もちろん、より適切な長期的な解決策は、php.iniまたは同等のファイルを実際に更新することです。ただし、これは確認するための便利で迅速な方法です。

テスト

print($_SERVER['HTTP_REFERER']);サイトで実行し、google.comにアクセスし、テキストを調べて編集し<a href="https://example.com">LINK!</a>、変更を適用してから、リンクをクリックします。それが機能する場合、すべてが順調で正確に実行されています!

しかし、$ _ SERVERが間違っているか、上記のテストで壊れている可能性があります。これでページを更新してから、もう一度テストしてください...

<script type="text/javascript">
    console.log("REFER!" + document.referrer + "|" + location.referrer + "|");
</script>

使用法

HTTP REFERERを使用して、GoogleAnalyticsのスパムサイトをブロックしています。 以下は、ある特定のWebサイトの紹介に焦点を当てたグラフです。1日で0から44まで、実際のユーザーが原因ではありませんでした。それは、ボットされたサイトが彼らのサービスを購入するために私の注意を引き付けようとしたことが原因でした。しかし、php.iniがリファラーを無視するように更新されたために開始されました。つまり、これらのスパム、ジャンクガベージサイトは適切なエラー403「アクセスが拒否されました」を取得していませんでした。

于 2020-05-03T17:54:47.877 に答える
0
function redirectHome($theMsg, $url = null, $seconds = 3) {
    if ($url === null) {
        $url  = 'index.php';
        $link = 'Homepage';
    } else {
        if (isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] !== '') {
            $url = $_SERVER['HTTP_REFERER'];
            $link = 'Previous Page';
        } else {
            $url = 'index.php';
            $link = 'Homepage';
        }
    }
    echo $theMsg;
    echo "<div class='alert alert-info'>You Will Be Redirected to $link After $seconds Seconds.</div>";
    header("refresh:$seconds;url=$url");
    exit();
}
于 2016-11-06T08:07:25.770 に答える