プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
PHP、google chromeでだけ不具合(ErrorDocument 404が原因)。
いや~ハマったハマった。
舐めるなよ!って位ハマった。

不正遷移チェックの為に、遷移元のページ情報をセッションに持たせて
遷移元チェックを実装していたのですが。。
http_refererが信用ならないから自前でわざわざ作ったってのに
こんなに苦労するとは思わなかった(つд`)

と言う訳でどんな不具合かと言いますと、

index.html:
 session_start();
 $_SESSION['prevpage'] = 'index.html';

test.html:
 session_start();
 $_SESSION['prevpage'] = 'test.html';

test2.html:
 session_start();
 print $_SESSION['prevpage'];


と言う3つのファイルを用意しました。
※本当はもっと多いし処理もいっぱいやっていますが簡略化します。

この状態で「index.html」→「test.html」→「test2.html」と遷移すると
最終的には何が表示されるでしょう?

そうですね、'test.html'が表示されるはずです。
'index.html'設定→'test.html'設定→表示なので。

Internet Explorer
Mizilla FireFox
Opera
Safari
では期待通りの動作をして'test.html'が表示されました。


ただ何故か「google chrome5.0.375.55」と「Sleipnir2.9.3」では
'index.html'と表示されちゃったのですよ。何で?
ちなみに「index.htmlを経由しないで
「test.html」→「test2.html」の遷移でも何故か'index.html'と表示されます。

そこからは聞くも涙、語るも涙ですが、多分皆さんは興味無いと思うので省略します。


ところでですね。

実は「.htaccess」を配置しておりまして、その中に以下の記述を入れてました。

ErrorDocument 404 http://example.com/index.html


・・・・・・・・・・・・おまえか?(-公-;

試しにこの記述を削除した所、バッチリ直りました。

ほんで色々試してみた所、どうやらgoogle chromeでは
この「.htaccess」の「ErrorDocument 404」で指定したファイル内の処理も
ページ遷移する度に実行されるっぽいです。しかも本来の処理が始まる前に。
試しにindex.html内でだけログをファイル出力するようにした所、
ページ遷移する度にログが出力されました。大盤振る舞いだなぁ。

と言う訳で先のセッション値がおかしくなる問題も
ページ遷移する度に「$_SESSION['prevpage'] = 'index.html';」が行われているのが
原因でした。google chromeだけだけどなっ。


条件が揃った時のみ起こる不具合っぽいですが、
似たような事やる人は気を付けて下さい。

結構検索したのですが全然これっぽっちもさっぱり分からなかったので
最終的にはサーバ上のセッション値をずーっと眺めるハメになりましたよ(つд`)
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:● PHP  thema:プログラミング - genre:コンピュータ  Posted by ササキマコト 

  関連記事