リファラーURLを取得するために$_SERVER['HTTP_REFERER'];
を使用しています。ユーザーが別のページをクリックし、リファラーが最後のページに変更されるまで、期待どおりに機能します。
元の参照URLを保存するにはどうすればよいですか?
Cookie(状況に応じて適切な場合)またはセッション変数に保存します。
session_start();
if ( !isset( $_SESSION["origURL"] ) )
$_SESSION["origURL"] = $_SERVER["HTTP_REFERER"];
ジョナサンが示唆したように、クッキーまたはセッションに保存する必要があります。
より簡単な方法は、セッション変数を使用することです。
session_start();
if(!isset($_SESSION['org_referer']))
{
$_SESSION['org_referer'] = $_SERVER['HTTP_REFERER'];
}
それをページの上部に置くと、サイト訪問者が指示された最初のリファラーにいつでもアクセスできます。
ほとんどの場合、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']をエスケープすることもできます。
現在のブラウジングセッションでのみ有効なCookieに保存します
これを試して
(isset ($_SERVER['HTTP_CLIENT_IP']) ?
$_SERVER['HTTP_CLIENT_IP'] :
(isset ($_SERVER['HTTP_X_FORWARDED_FOR']) ?
$_SERVER['HTTP_X_FORWARDED_FOR'] :
$_SERVER['REMOTE_ADDR']
)
)