2010-12-03 4 views
3

これを実際に実装すると、認証や他のものがたくさんありますが、もっとも簡単な形で、私が抱えている問題があります。ヘッダーでリダイレクトしても、リファラーとしては見えません。リダイレクトとリフェラル

それでは、私は3つのページ持っているとしましょう:start.php、middle.phpをして

start.php

<html><body> 
<a href="middle.php">middle</a> 
</body></html> 

middle.php

<?php 
header('Location: end.php'); 
?> 

終わりをend.php。 PHP

<?php 
    echo 'The referer is: ' . $_SERVER['HTTP_REFERER']; 
?> 

リンク、end.phpで終わりますが、refererはmiddle.phpではありません。これを修正するために使用できるリダイレクト方法は他にありますか、それとも何か他の方法がありますか?この場合

乾杯

EDIT 、先のページには、サードパーティベンダーです。検証する必要がある唯一の方法は、URLを参照することです。私はそれを支配していない。私はちょうど適切なURLを送信するためにリダイレクトを行う私のページが必要です。 http_refererを信頼しない理由を絞り込むのではなく、このリダイレクト方法の代替手段はありますか?

+0

リファラーは信頼できないことに注意してください。あなたはあなた自身のものを送るか、まったく何も送っていないかもしれません。 'Origin'ヘッダが私の頭に浮かびます。 – jwueller

+0

これは当てはまりますが、私たちはいつもセッションをチェックしています。有効なセッションがない場合は、ログインしてログインする必要があります。 –

答えて

0

私はリダイレクトの古いメタリフレッシュ方法と一緒に行きました。これにより、それを必要とするベンダーのための参照URLがそのまま保持されます。それを必要としないベンダは、速度と使いやすさのためにヘッダ機能を使用します。

3

申し訳ありませんが、あなたのコントロールの範囲外です。ブラウザのみがそのヘッダーを送信できます。すべてではありません。それは簡単に偽造することができるので、それに頼らないでください。

さらに詳しい情報はphp bug(これはバグではありません)でご覧になれます。

0

この質問は、何度もポップアップしています(私は今のところ二重引用符を見つけることができません)。私はいつも、ブラウザで設定するものが標準では定義されていないと考えていますこの状況の参照元。

GETパラメータなどを使用して明示的に指定するオプションはありますか?

0

私はこのような何かを示唆している:あなたはリファラーを使用しようとしている何

echo 'redirected from ' . urldecode($_GET['from']); 
0

:あなたはリダイレクトが発行された場所から知っているしたいページで

header('Location: end.php?from=' . urlencode($_SERVER['PHP_SELF')); 

そしてをのヘッダー情報?

リクエストの発信元の認証/検証用の場合は、別の方法を試すことを検討することもできます。 El Yoboが指摘したように、Referrerヘッダーは誰かの要求がどこから来ているかを決める簡単ではありません。

1

HTTP_REFERERは信頼できません(外部から簡単に変更できます)ので、リクエストごとにセッションに最後に訪れたページを簡単に保存できます。その後、リロード時に簡単に検索できます。

つまり、$ refer_url = $ _SESSION ["refer_url"]というように参照先を読み込みます。 $ _SESSION ["refer_url"] = $ current_absolute_url;を保存します。各要求を終了するとき。

これは並行性の問題である可能性があることに注意してください。並列リクエスト(例えば、AJAXなど)を使用すると、実際にはなかったページから来たと簡単にセッションで信じることができます。

Retrieving the absolute path of the current request

+0

または、AJAXのない単純なページでも、複数のタブやブラウザウィンドウ。この方法を追跡するのは難しいです... –

関連する問題