[PHP-users 18257]Re: PHPLIBのログインフォームを外部に持ちたい

Toshikazu Yoshikawa toshi @ uncut00.com
2003年 10月 4日 (土) 14:05:59 JST


お世話になっております。
吉川@アンカットです。

> 外部フォームからログインしようとしたときは、表示されるページで、
> POSTを受信できていないことがわかりました。
> $_POST["username"]、$_POST["password"]を出力したところ空白でした。
> そのページには、URLにPHPSESSID=xxxxx というのがくっついてきていたので、
> 勘ですが、Sessionクラスの、$fallback_mode を "get"→""(空白)にしたら
> POST受信できるようになり、あとは吉川さんからご教授いただいた方法で
> ログインに成功しました。

fallback_modeのことをコロッと忘れていました。
私、いつもクッキーモード決めうちで使用していたので。

お察しの通り、fallback_modeを指定した場合、
外部から来る変数は取得できません(POST、GETともに)。

なぜなら、PHPLibでのセッションが開始されるときに、
fallback_modeが指定されていると、同じページが2回アクセスされるからなんですね。
1回目のアクセスではセッションIDをクッキーにセットし、
Locationヘッダーで、もう一度強制的に自分自身にアクセスさせます。
2回目のアクセス時に、セットしたはずのクッキーがブラウザから返されなければ、
そのブラウザはクッキーがOffになっているものと判断するためです。

クッキーがOffになっていると、セッションIDが失われてしまうため、
Locationヘッダーで指定するURLに
PHPSESSID=xxxxxxとしてIDを埋め込み、持ち回らせようとします。

この同じページに2回アクセスというのが、
外部から直接POSTできない理由になります。
初回は当然受け取っているのですが、Locationヘッダーでもう一度アクセスさせるときに
その外部からのPOST値を引き継いでくれないのです。

もともとこういう利用のされ方は想定されていなかったのでしょう。
今回の田中さんの外部フォームからの直接ログインを実現するためには、
modeでcookieかgetの決めうちにし、fallback_modeを指定しないことが
前提になります。

-- 
Toshikazu Yoshikawa <toshi @ uncut00.com>



PHP-users メーリングリストの案内