[請益] 系統登入後,點選系統其他連結時會產生兩個session id?

看板PHP作者 (nick)時間17年前 (2008/08/10 20:32), 編輯推噓0(006)
留言6則, 2人參與, 最新討論串1/1
小弟是PHP的新手,如果問了笨問題請多海涵... 工作環境:WebServ v1.2.10.0 + WinXP SP3 問題: 使用者在登入頁面(login.php)輸入帳密後,帳密的資料會POST到checker.php的頁 面,checker.php主要在連結MySQL進行帳密比對並將資訊寫入session中。使用者成功 進入系統後,點選修改密碼的連結,此頁面會先檢查session的數值是否正確才後,才 讓使用者進行修改,否則會自動跳出系統到登入頁面,讓使用者重新登入。 問題就出現在使用者登入後,session A會產生在我設置的目錄底下,但是當使用者 進入系統點選其他會使用到session內容的頁面時,系統又會產生一個session B,怪的 是session B是沒有紀錄任何數值的空檔案,而該php的頁面又只認sesssion B,不會去 抓session A的值。 此時系統會自動轉跳到login.php頁面讓使用者重新登入,妙的是使用者重新登入 後就不會產生上述的問題,因為第二次登入時系統會把session寫進去上次登入時產生 的session B。 現在只要奇數次的登入就會發生這個問題,偶數次則不會(因為他會自己抓取 session B並寫入值)。 ------------------------------------------------------------------------------ checker.php部分程式碼: <?php session_start(); header("Content-type: text/html; charset=big5"); $link=mysql_connect('127.0.0.1','root','root'); if(!$link) echo "fail"; mysql_select_db("cesh", $link); $id=$_POST['id']; $pass=$_POST['password']; $sql = "select user_password from user where user_id='$id'"; $result=mysql_query($sql,$link); $row=mysql_fetch_row($result); if($row[0]==$pass && $pass <>'') {//比對密碼是否正確 session_register("id"); //註冊user id session_register("pass"); //註冊user password session_register("islegal"); //註冊是否登入 session_register("se_room"); $_SESSION['id']=$id; $_SESSION['pass']=$pass; $_SESSION['islegal']="y"; echo "<hr>歡迎使用者 <B>$id</B> 使用本系統,三秒後系統自動跳轉頁面<hr>"; header("Refresh: 3 ; URL = http://localhost/menu.php"); } mysql_close($link); ?> ----------------------------------------------------------------------------- 修改密碼頁面: <?php require_once("http://127.0.0.1/incld.inc"); session_start(); $id=$_SESSION['id']; $pass=$_SESSION['pass']; $islegal=$_SESSION['islegal']; if($islegal=="y") { $sql = "select user_name from user where user_id='$id'"; $result=mysql_query($sql,$link); $row=mysql_fetch_row($result); echo "歡迎使用者:<B>$row[0]</B>"; } else { echo "Session過期,請重新登入!<P>"; header("Refresh: 3 ; URL=http://localhost/login.php"); } ?> <FORM ACTION="modify_password.php" METHOD=POST> <TABLE border=1> <TR> <TD>原始密碼</TD> <TD><input type=password size=10 name=password_eo></TD> </TR> <TR> <TD>新密碼</TD> <TD><input type=password size=10 name=password_new></TD> </TR> <TR> <TD>確認新密碼</TD> <TD><input type=password size=10 name=password_check></TD> </TR> </TABLE><P> <input type=submit VALUE="送出"> <input type=reset VALUE="重填"> </FORM> ----------------------------------------------------------------------------- 小弟在本版以及google爬了很久的文卻找不到解決的方法,只有找到一篇類似的 問題(http://bbs.ecstart.com/thread-8263-1-1.html 請看三樓的回答),可是也 沒有人有正解... 麻煩各位高手相救,感恩~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.68.219.128

08/10 22:03, , 1F
http://127.0.0.1/incld.inc 裡有些什麼東西呢?
08/10 22:03, 1F

08/11 23:26, , 2F
header("Content-type: text/html; charset=big5");
08/11 23:26, 2F

08/11 23:26, , 3F
$link=mysql_connect('127.0.0.1','root','root');
08/11 23:26, 3F

08/11 23:26, , 4F
if(!$link) echo "fail";
08/11 23:26, 4F

08/11 23:27, , 5F
mysql_select_db("cesh", $link);
08/11 23:27, 5F

08/11 23:28, , 6F
其實就是chcker.php的第4~7行
08/11 23:28, 6F
文章代碼(AID): #18dj_DDY (PHP)
文章代碼(AID): #18dj_DDY (PHP)