今日の聞いてないよ HTTP_REFERER
今日はHTTPのリファラーで接続元を
判断して表示するプログラムを作っていました。
が。。。明らかに直リンではなく、リンク元はページにのせたリンクを
クリックしてるはずなのに。。リファラーが取れない。
構成はこんな感じ
① http://リンク元ページ.html リンク先へのリンクンクをクリック
↓
② http://リンク先ページ.html
と、なんの変哲も無いハイパーリンクです。
リファラーって偽造もできるし100%ではないとは聞いていたけど
こんなにいいかげんなんだっけ?自分はなにもしてないのに。
、と思いつつ
PHPで var_dump() しても$_SERVER['HTTP_REFERER']の値がありません、、え”っ、
小一時間はまったところ実際は下記のような動作を
していました。
① http://リンク元ページ.html リンク先へのリンクンクをクリック
↓
② リダイレクト
↓
③ https://SSLページ.html
↓
④ リダイレクト ←ここがキモ
↓
⑤ http://リンク先ページ.html
これが何を悪さしてるかというとですね、
確認をMac Safari3, Win FireFox3, Win IE6
で確認したところ
SSLからHTTPへのページ遷移ではリファラーを渡さない
仕様だったようで、リンク先でセッションとか使っていた自分は
まったく気づかなかった訳です。
リファラーはブラウザがリクエストヘッダに入れるものですので
サーバ(Apache)はまったく疑わず
一生懸命セッションを疑ってましたから。
まぁ途中のリダイレクトも気づいてませんでしたけどね。(^^;;
たぶんIE7もそうなんでしょうね
そういえばリファラー利用したのは初めてかも。
ブラウザの動作を規定したHTTP1.1のような規格ってないんでしょうか?
こういうハマリをよくするのでわたくし、
ページ遷移にリダイレクトはあまり使いません。