[PHP-users 2182] sessionによるユーザ認証時の header(Location:) 、キャッシュのブラウザ依存性について

Shu Sawada php-users@php.gr.jp
Thu, 20 Sep 2001 01:46:34 +0900


はじめまして、沢田@Cycle of 5thと申します。
学部生をしながら、厨房プログラマしてます。
php-users MLでの議論並びに過去ログをいつも参考にさせていただいております。
早く、このような場で有益な発言が出来るようになりたいです。

さて、現在PHP+Postgresによるごく一般的なユーザー認証を行い、セッション
確立後に各コンテンツページへLocationで飛ばすというコードを書いています。
IDとパスでログインするという、ごくごくありふれたものです。
当然、各コンテンツページではセッションによるユーザのチェックが行われて
います。(IT Boost様のsiteを参考にさせていただきました。多謝)

開発はIE5.5で行い、問題なく動作しました。
そこで、納品前に様々な環境でテストを行ったのですが、どうも処理の遅い
マシンではheader(Location)が上手く通りません。

具体的には、ページは遷移しますがセッションが確立していない状態の様で、
再びログインを求められてしまいます。
場合によっては、いつまで経ってもログイン出来ないという状況になって
しまいました。

再現条件が安定しなくて、MacのNN、NT4のIE5.5、98のIE5.0等々…
さっぱりわからないのですが、どうもレスポンスの悪いマシンに多い傾向が
認められました。

それではと、<a href=> にて手動で次のページへ遷移させると、何も無かった
かのようにちゃんと動いてくれます。
仕方が無いので、ad hocですがmetaのrefreshで2秒後に遷移させると、
期待通りの動作になりました。明日、再び稼動テストを行うつもりでいます。

しかし、このような現象は、通常起こり得るものなのでしょうか?
また、もっとスマートな解決策をご存知の方、どうかお知恵を拝借させて
下さい。お願いいたします。


それから、既出かとは思いますが、もう一つTipsを質問させて下さい。

キャッシュの話です。当然?キャッシュでハマりました。^^;
動的なページが多いため、cache_limiter = nocacheで作成しました。
IEだと何も問題が無いのですが、NNになると、POST後に遷移する画面
(例えば掲示板の「書き込みました」を表示する部分など)で
「POSTで作成されたキャッシュの有効期限切れ」(data missing)という
エラーが出てしまいました。

結局のところ cache_limiter を nocache から public にすれば
NNの「有効期限切れ」とかいうエラーは無くなるのですが、それでは
クライアントの要求が満たせなくなってしまうので(激しく動的なページがあるので)
php.iniではnocacheにして、「POSTによるデータの云々」が出る部分でのみ
header で cache をpublicにしました。

しかし、こうするとcacheに関するヘッダが2重に出ているように思うの
ですが、これは問題が無く、汎用性があるものなのでしょうか?
(一応、確認しうる限りでは期待通りの動作になっている様ですが…)

また、なぜそもそも「キャッシュの有効期限切れ」というメッセージが
出てくるのでしょうか?(nocacheならキャッシュは使わないんじゃ??)
NNは一度キャッシュにデータを溜めてからじゃないと表示出来ないという感じ
なのでしょうか?(自分で何か勘違いをしている気がします…)


ここら辺のブラウザ毎による振る舞いというのはPHPとはちょっと外れた話題
のようにも思いますが、どうか関連事項という事でお許しください。
何か、理解の糸口を与えていただけると幸いです。

長文失礼致しました。

#Webシステム側の問題ではない(と思う)ため、環境は省略させていただきます。

------
luna as Shu Sawada (lunanet administrator)
luna@lunanet.gr.jp  http://www.lunanet.gr.jp
[この調子でとばすか タイムアップまではもーあとわずか]