web-dev-qa-db-ja.com

PHPで元のURLリファラーを取得しますか?

リファラーURLを取得するために$_SERVER['HTTP_REFERER'];を使用しています。ユーザーが別のページをクリックし、リファラーが最後のページに変更されるまで、期待どおりに機能します。

元の参照URLを保存するにはどうすればよいですか?

104
Keith Donegan

Cookie(状況に応じて適切な場合)またはセッション変数に保存します。

session_start();

if ( !isset( $_SESSION["origURL"] ) )
    $_SESSION["origURL"] = $_SERVER["HTTP_REFERER"];
129
Sampson

ジョナサンが示唆したように、クッキーまたはセッションに保存する必要があります。

より簡単な方法は、セッション変数を使用することです。

session_start();
if(!isset($_SESSION['org_referer']))
{
    $_SESSION['org_referer'] = $_SERVER['HTTP_REFERER'];
}

それをページの上部に置くと、サイト訪問者が指示された最初のリファラーにいつでもアクセスできます。

17
Tyler Carter

ほとんどの場合、Cookieを参照ページのリポジトリとして使用すると、Cookieがブラウザーを閉じるまでリファラーを保持するため(ブラウザーのタブを閉じても保持します)、ユーザーがページを開いたままにした場合、週末の前に、そして数日後にそれに戻った場合、セッションはおそらく期限切れになりますが、クッキーはまだそこにあります。

そのコードをページの先頭に配置します(Cookieはエコー/印刷の前にのみ適切に設定されるため、html出力の前に)。

if(!isset($_COOKIE['Origin_ref']))
{
    setcookie('Origin_ref', $_SERVER['HTTP_REFERER']);
}

その後、後でアクセスできます。

$var = $_COOKIE['Origin_ref'];

また、@ pcpが$ _SERVER ['HTTP_REFERER']のエスケープについて示唆したものに加えて、Cookieを使用する場合、各リクエストで$ _COOKIE ['Origin_ref']をエスケープすることもできます。

4
Kainax

現在のブラウジングセッションでのみ有効なCookieに保存します

4
Matt

これを試して

(isset ($_SERVER['HTTP_CLIENT_IP']) ? 
    $_SERVER['HTTP_CLIENT_IP'] : 
    (isset ($_SERVER['HTTP_X_FORWARDED_FOR']) ? 
        $_SERVER['HTTP_X_FORWARDED_FOR'] : 
        $_SERVER['REMOTE_ADDR']
    )
)
0
user11688571