2007年8月3日 星期五

《 PHP 》Session 的疑惑

session 拿來儲存登入之後的資訊,但是熊熊會出問題
有去查 Google 大神,但是還是沒感覺到哪邊出問題,現在啟動的是替代方案。

Login 頁面:

if(!(strlen($_SESSION['id'])<1 || strlen($_SESSION['name'])<1))
{
$id=$_SESSION['id'];
$name=$_SESSION['name'];
}

而我在其他網頁會重複使用相同的變數名稱,每當該頁有 session_start()
不管 $name,$id...etc 是否有使用到,他的值一定會變樣(也就是植被更改)

某一頁(問題):

if(!(strlen($_SESSION['id'])<1 || strlen($_SESSION['name'])<1))
{
$id=$_SESSION['id'];
}

// SQL 區段
$id='46564122';
$query="select * from table where id='$id'";
$result=mysql_query($query);

只是連到這頁而已,完全沒用到 session 的變數(頂多是覆蓋)
但是呢,session的值再第三頁讀取發現他已經變樣了,變成剛剛的 46564122。

##CONTINUE##
替代方案(解決頁):

if(!(strlen($_SESSION['id'])<1 || strlen($_SESSION['name'])<1))
{
$id=$_SESSION['id'];
}

// SQL 區段
$ida='46564122';
$query="select * from table where id='$ida'";
$result=mysql_query($query);

竟然改一個變數名稱就可以解決( $id => $ida ),天啊~~
不知道是為啥,這樣來看不用到 session 就別 session_start() 的樣子,
這有可能讓別頁的相同名稱變數改到我的資訊,實在驚人。
應該有正確的解釋方式吧?我只能暫時先這樣做,改天要好好找出問題。

沒有留言:

張貼留言