[PHP-users 29658] Re: sessionを使った認証フォームに関して

Shu Sawada luna @ lunanet.gr.jp
2006年 7月 8日 (土) 01:19:59 JST


さわだです。
検証取っていない上にビール片手なので当たっている保証はないです。

とりあえず、この順番っておかしくないですか?

> if(!$_SESSION[username]){
> echo "認証が必要です。ユーザー名とパスワードを入力して下さい。";
> authform();
> }
> //ユーザ名とパスワードが送られてきた場合は認証
> if($username <> "" && $passwd <> ""){

いったいどのタイミングで$_SESSIONに値が代入されるのでしょう?

	- formに入力
	- formからPHPにPOSTで値が渡る
	- セッションに値が無い
		- formを表示

を永遠に繰り返す気がします。

	- formに入力
	- PHPにPOSTで渡る
	- セッションに値が無い
		- ID/PWがPOSTされていない
			- エラー(form表示)
		- ID/PWがPOSTされてるなら、POSTされたものを検証
			- OKならセッションにセット
			- NGならエラー

にしないといけなくないですか?

あと、細かいところ。

- マニュアルのこの部分を見て、

http://jp.php.net/manual/ja/function.session-start.php

> 注意:  クッキーに基づくセッションを使用している場合、ブラウザに何か出力
> を行う前にsession_start()をコールする必要があります。

何か思い当たる節はありませんか?
(でもこれは直接の原因じゃないかも、出力バッファの設定とかも絡みますか)

- session_start() って、2回呼ばれてませんか?

- if(!$_SESSION[username]) って、大丈夫ですか?
 if( !isset($_SESSION['username']) ) とかじゃないですか?
 これだと、" Notice: Use of undefined constant username " みたいに言われないです?
 (これも設定なのかな)

- 特に理由が無いなら、Register_globalsはOffにするべきだと思います。
- Setoさんも仰ってますが、バージョン更新できるならした方が良いと思います。

-- 
Shu Sawada
http://luna.lunanet.gr.jp/
http://www.cycleof5th.com/


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