4

Quoraでこの質問を見つけましたが、解決方法がわかりませんでした

シナリオ -

ユーザーは one.php を使用しており、two.php を指すリンクをクリックします

Two.php は、three.php へのヘッダー リダイレクトを行います。

three.php の参照 URL を確認すると、$_SERVER は two.php ではなく one.php を示しています。

two.php がヘッダー リダイレクトを行った中間ページであったことをどのように確認できますか?

one.php または two.php では何もできないことに注意してください。

4

4 に答える 4

3

セッションでレコードを保存する

セッション変数にスタックを保存できます。$_SESSION["history"]コレクションが特定のサイズに成長したら、配列の末尾からアイテムを削除して、値を にシフト解除し続けます。

例えば:

// Need to do this if we wish to store data
session_start();

// Set the history array if it doesn't exist
isset( $_SESSION["history"] ) || $_SESSION["history"] = array();

// Push current URI onto history
array_unshift( $_SESSION["history"], $_SERVER["REQUEST_URI"] );

// Prevent history from exceeding 5 values
array_splice( $_SESSION["history"], 5 );

すべての PHP ファイルにロードする

これは、各ファイルの先頭に追加するか、グローバル ヘッダー テンプレート インクルード (ある場合) に追加する必要があります。または、勇気がある場合は、次を使用してグローバルにロードできますauto_prepend_file

メイン ファイルの前に自動的に解析されるファイルの名前を指定します。ファイルは、require 関数で呼び出されたかのようにインクルードされるため、include_path が使用されます。-ドキュメンテーション

履歴を調べる

以下にアクセスして、履歴全体を表示できます$_SESSION["history"]

// Output history array
var_dump( $_SESSION["history"] );
于 2012-05-31T19:17:34.600 に答える
1

one.phpまたはtwo.phpにアクセスできないため、ここでは回避策はありません。two.phpがリダイレクトを提供したため、ブラウザーはリファラーを渡し、two.phpをマスクします。これはRFCで指定されていませんが、クライアントの規則です。

アクセス権がある場合は、301を使用しながら、クエリでリファラーURLを渡すことができます。ハッシュまたは署名を追加すると、URLを検証できます。

于 2012-05-31T19:31:10.657 に答える
0

セッションまたは Cookie を使用できます。エントリに時間のマークを付け、タイムスタンプが非常に近いエントリのみを考慮する必要があります。

于 2012-05-31T19:19:20.280 に答える
-1

two.php から three.php へのリダイレクトで GET パラメータを使用できます。

したがって、two.php では次のようになります。

header('場所: three.php?source=two.php');

そして、three.php で $_GET['source']; をチェックします。

于 2012-06-04T02:30:40.833 に答える