0

http://www.example.com/abc/def/a/の下に、ユーザーが製品を購入できるページがあります。マーケティング活動 (印刷物) の場合、顧客は短い URL http://www.example.com/order/を入力する必要があります。

この URL が呼び出されると、サーバーは次のスクリプトを実行します。

<?php
header("Location: http://www.example.de/abc/def/a/");
exit;
?> 

http://www.example.com/abc/def/a/の下のページには、http ://www.example.com/order/から来たユーザーにのみ表示される情報 (リベート コードなど) が含まれています。

$_SERVER['HTTP_REFERER']私が読んだものから信頼できないようです。

phpinfo();「注文」を含む情報変数があるかどうかを確認しましたが、見つかりませんでした。

それは可能ですか、それとも別のアプローチをお勧めしますか?

4

2 に答える 2

1

お気づきのように、HTTP リファラーは他のすべてのヘッダーと同様に簡単に偽装できます。これを達成するための唯一の信頼できる方法は、ユーザーが注文ページにアクセスしたときにログを記録し、/abc/def/a/ページにアクセスしたときにログエントリが存在することを確認することです. この種のログは に保存でき$_SESSIONますが、複数のサーバーを使用する場合は、すべてのサーバーが同じセッション情報を共有するように適切に設定してください (セッション データを保存するために redis サーバーを使用できます)。

注文ページ:

session_start();
$_SESSION['order_visited'] = true;

リベート コード ページ:

session_start();
if(!isset($_SESSION['order_visited']) || !$_SESSION['order_visited']) {
    header('Location: /order'); // Must visit order first
    die();
}
于 2012-07-14T07:51:55.520 に答える
1

HTTP はstateless-protocolの純粋な形式であるため、現在の問題を解決するのに役立つプロトコル自体には何も見つかりません。

$_SESSIONリクエスト間でデータを保存するためにを使用するのが最も簡単な方法であり、私が推奨する方法です。

言われるように; 情報を転送するために使用されるプロトコルはステートレスであるため、どのリクエストがどのユーザーによって行われたかを Web アプリケーションが認識する方法を作成するしかありません..これは、php-sessions によって解決される完璧な問題です。


于 2012-07-14T07:47:19.280 に答える