[PHP-users 7487] セッション&Header関数で値が引き継がれない

tmr php-users@php.gr.jp
Thu, 16 May 2002 05:59:18 +0900 (JST)


こんにちは。tmrです。
いくら調べても分からなくてここに来ました。

環境は、
 WindowsNT4 Server
 IIS4
 PHP Version 4.2.0
 MS SQL Server 7
です。

やりたいことは、
ログインし、ユーザの詳細情報をDBに登録していく作業です。
その際にログイン情報をセッションにて引き継がれて欲しいのです。

下記の4種類のファイルがあります。
index.html
login.php
entry.php
confirm.php

index.html
<FORM ACTION="login.php" METHOD="POST">
 ユーザ名<INPUT TYPE="TEXT" NAME="user" SIZE="10" MaxLength="10"><BR>
 パスワード<INPUT TYPE="PASSWORD" NAME="pass" SIZE="10" MaxLength="8"><BR>
 <INPUT TYPE="IMAGE" SRC="images/login.png">
</FORM>

login.php
<?
session_start();

:

$ms_conn = mssql_connect("hostname","test","test");
$ms_result = mssql_query("select UserID from tbl_user where UserName = '$user' and Password = '$pass'", $ms_conn);
$ms_num = mssql_num_rows($ms_result);
if (!$ms_num) {
	mssql_close($ms_conn);
	alert("認証エラー");
	header("Location: index.html");
}else{
	session_register("name","pw","uid");
	$name = $user;
	$pw = $pass;
	$ms_uid = mssql_fetch_row($ms_result);
	$uid = $ms_uid[0];

	$ms_chk = mssql_query("select * from tbl_detail where UserID=".$uid, $ms_conn);
	$ms_dt = mssql_num_rows($ms_chk);
	if ($ms_dt) {	//既に登録済み
		Header("Location: confirm.php");
	}else{	//新規登録
		print "ようこそ!".$name."さん<BR>\n";
		print "詳細情報を登録して下さい<BR>\n";
		print "<FORM ACTION='entry.php' METHOD='POST'>\n";
		print "<INPUT TYPE='SUBMIT' VALUE='登録'>\n";
		print "</FORM>\n";
		mssql_close($ms_conn);
	}
}
?>
:

問題は、このHeader("Location: confirm.php");
ここで呼ばれたconfirm.phpに移る時に、セッションが新しく作成されてしまいます。
c:\php\sessiondataフォルダの中に、ポコっと、0kbのファイルが...。

このおかげで、値が引き継がれなくなってしまうんです。
confilm.phpの中で、
$nameも$pwも$uidもないよと言われてしまいます。

<FORM ACTION='entry.php' …
に関しては、きちんとセッションが渡っています。

Header()関数は、セッションが引き継がれないのでしょうか??
そんなことはないですよねぇ。。。
こんなことは昔から使っていたはずなのですが…。

php.iniの内容ですが、
register_globals = On
session.use_cookies = 1
session.gc_probability = 1
session.use_trans_sid = 1
こんな感じになってます。

何処がいけないのでしょうか。。。
また、Header関数以外の方法はありますでしょうか??

お知恵をお貸しください!!
どうかよろしくお願い致します。。。

--
tmr <tmr@mbi.nifty.com>