Jun 26, 2007

サーバ時刻の遅延にご注意

ポスト @ 16:53:59 | PHP

これ、カテゴリはPHPじゃないんですが、たったさっきPHPの作業中に思いっきりドハマリした件。ネット上では見つけられなかったのでリソースとして書いておきます。

ちょっとしたクロスサーバな認証システムを作っているのですが、そのテストスクリプトがFireFoxでは動作するけどIE6だと動かない、という問題が発生しました。

ログイン画面で認証が済むと、ブラウザに認証クッキーを渡すと同時に同一サイト内の別ページにリダイレクトとなりますが、FFではそのクッキーがちゃんと記録されているので正常動作するのですが、IE6だとそのクッキーがまったく覚えられていない!
httpヘッダを覗き見してみたところ、こちらからのリザルトヘッダはまったく正常なもの、しかしリダイレクト先へのリクエストヘッダには、この認証クッキーのみ含まれていないという体たらくです。。。

んもう悩みまくりましたが、じーっとこっちのリザルトヘッダを眺めてて気がついた、なんでこのクッキー、期限が過去日付なんだ??(?_?)
だがしかし、そんな過去クッキーでも、FFではちゃんと有効になるのです(@_@)。タイムアウトテストのために有効時間を60秒に設定したのですが、ちゃんとFFではその残り時間がリロードごとに減って表示される。
もしや?? と思い、有効時間を600秒にしたら思いっきり動きました…

これ、要するにテスト用に設定していただいたサーバの時刻が4分くらい遅れていて、「サーバにとっての60秒後=IEにとって過去」だったという壮絶なオチでしたよ。。。。

で、じゃーなんでFFでは動いたのか、といえば、どうやらFFはリザルトヘッダの冒頭にあるサーバ時刻を見て、クッキーの有効期限を補正しているようなのですね。
ドキュメント類読んだ限りでは、この補正は義務付けられているわけではないようで、要するにサーバの時刻はできるだけ正しくしておきましょうっていうことでしょうか(^^;;)
もっとも、FFの対策は、クライアントPCの時刻が大幅に進んでいるような場合でも有効になるわけですから、やっぱりブラウザ側でなんとかしてほしいなぁ、とは思った次第です。

Trackback

No Trackbacks

Track from Your Website

http://blog.izumichan.com/trackback/tb.php?id=498

Comment

No Comments

Post Your Comment


*は入力必須です。E-Mailは公開されません。