2012-12-19 11 views
7

ブラウザーがヘッダー情報をサーバーに送信すると、$_SERVER['HTTP_REFERER']は直前のページURLを正しく表示するはずですか?

ヘッダー情報がサーバーに送信されない場合、$_SERVER['HTTP_REFERER']から何が返されますか?空の文字列ですか?偽ですか?ヌル?または...?

+5

使用 'のvar_dump($ _サーバー)'を使用して自分のために見ることになります。 – Barmar

答えて

9

HTTPリファラー要求ヘッダーが送信されない場合は、空の文字列になる可能性がありますが、$_SERVER['HTTP_REFERER']はおそらく設定されていません。この場合に設定されるかどうかは、サーバーによって異なる場合があります。読み取り時に

すべてのHTTPリクエストヘッダと同じように、その存在を確認:

$httpReferer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null; 
4

$_SERVER['HTTP_REFERER']は、ユーザーブラウザの特定の設定が問題になる可能性があるため、実際には信頼できません。しかし、はい、以前のURLを含める必要がありますし、ヘッダーが送信されていない場合、サーバーの構成に応じて空の文字列またはNULLを返します。

+0

$ _SERVER ['HTTP_REFERER']に対する信頼できる代替手段は何ですか? – Dheeraj

+1

@Dheeraj信頼できる代替手段はありません。 '$ _SERVER ['HTTP_REFERER']' PHPのスーパーグローバルは、基本的な 'Referer' HTTPリクエストヘッダの値を報告するだけです。それは信頼できないHTTP要求ヘッダーです。 _referring document_は他の方法では渡されません。 – MrWhite

0

$ _SERVERは、グローバル配列変数で、リファラ値は、キーHTTP_REFERERを持つ配列の要素です。リファラーヘッダーがブラウザによって送信されない場合、要素は単に配列から欠落しています。配列に要素があるかどうかは、array_key_existsで確認できます。この場合:それは設定されていないとき

array_key_exists('HTTP_REFERER', $_SERVER)

-1

値がnullまたはundefinedのどちらかになります。

代替は

$_SERVER['REDIRECT_URL'] 
+0

'$ _SERVER ['HTTP_REFERER']'の代わりに$ _SERVER ['REDIRECT_URL'] 'がありません。これら2つの変数は全く異なる情報を保持しています。 'REDIRECT_URL'は、内部書き換えがあったときの_current要求_(_referring要求_ではなく)の元のURLパスです。これは_server_によって設定され、_browser_では設定されません。 (一般的な使用例は、サーバーのエラー文書をトリガーした要求に関する情報を取得することです)。 – MrWhite

関連する問題