[PHP-users 5075] PHP4.0.6においてのセッションを使ったユーザ認証&はじめまして

Shigeaki Tsunoda php-users@php.gr.jp
Tue, 29 Jan 2002 18:20:50 +0900


はじめまして 津野田というものです。
いつもMLを参考にさせていただいております。
今回マニュアルや過去ログを参考にしましたが、
どうしても解決しなかった問題があるので質問させてください。

今回作成したいのはセッションを利用してのユーザ認証です。
今までの過去ログやマニュアルを参考にsample1.phpを作りました。
目的のサーバーにアップロードし動作確認をすると、
いったんはログインをしてリフレッシュはかかるのですが、
$HTTP_SESSION_VARSに値が入っていないためにWEB画面には
「セッションにパスワードかユーザIDが登録されていません。」
のコメントが出てしまいます。
また、ブラウザのクッキー一覧を見てみると、
PHPSESSIDはセットされているので
クッキーにも登録されている様子です。

マニュアルを参考にすると$HTTP_SESSION_VARSを利用する際は、
session_register()は使ってはならないと書いてありますし、
PHP4.1であるローカルでは動作しています。
ちなみに目的のサーバーのPHP4.0.6なのですが、
$_SESSIONを使っていないため大して関係ないと思っていますが・・・?
また$HTTP_POST_VARSには値が入っているので、$HTTP_SESSION_VARSも
利用可能な配列かと思います。

関数の説明
・check_passwd()
パスワードとユーザIDを受け取ってDBに問い合わせる。
rowsが1以上なら$LoginStatus["password"]にTRUEを代入

・check_time_out()
セッションに登録されているtimeをみて、
制限時間以内かをチェックし、制限時間ないならば
$LoginStatus["time"]にTRUE代入

・check_login_status()
$LoginStatus[]の要素がすべてTRUEならば$AllLoginStatusに
TRUEを代入
以上です。

よろしければご指南ください。
お願いします。

<?
/* sample1.php */

session_start();

// 新規ログインの場合
if((empty($HTTP_SESSION_VARS["user_id"]))and(empty($HTTP_SESSION_VARS["password"]))){
	// 認証ができれば
	if(check_passwd($HTTP_POST_VARS["password"],$HTTP_POST_VARS["user_id"])){

		$user_id = $HTTP_POST_VARS["user_id"];
		$password = $HTTP_POST_VARS["password"];

		$time = date("U");
		$sid = md5("$time $user_id $password");
		session_id("$sid");

		$HTTP_SESSION_VARS["user_id"] = $user_id;
		$HTTP_SESSION_VARS["password"] = $password;
		$HTTP_SESSION_VARS["time"] = $time;

		header("Location: $PHP_SELF");

	}else{
		echo "セッションにパスワードかユーザIDが登録されていません。<BR>\n";
		$AllLoginStatus = FALSE;
	}

// ログアウト
}elseif($UpdateMode == "logout"){
	$AllLoginStatus = FALSE;
	session_destroy();
}else{
	// 各種パスワードチェックなど
	check_passwd($HTTP_SESSION_VARS["password"],$HTTP_SESSION_VARS["user_id"]);
	check_time_out($HTTP_SESSION_VARS["time"]);
	check_login_status();
}

if($AllLoginStatus):
	echo "ログイン成功です.";
	echo "<A HREF=$PHP_SELF?UpdateMode=logout>LOGOUT</A>";
else:
	// ログイン画面のHTML
	exit();
endif;

?>
***********************
Shigeaki Tsunoda
<tsunoda@ex-brain.com>
***********************