2013-08-21 34 views
0

最近我遇到了使用我的網站的管理區域的問題。似乎有會話問題。看到發生了什麼事情與$_SESSION,我創建了以下腳本:

<? 
session_start(); 
mysql_connect("localhost", "USERNAME", "PASSWORD"); 
mysql_select_db("DATABASE_NAME"); 

if (isset($_SESSION)) { 
    echo '<pre>session var:<br/>'; 
    var_dump($_SESSION); 
    $perm = mysql_fetch_assoc(mysql_query("SELECT * FROM `perm_groups` WHERE `id` = '".$_SESSION['perm']."'")); 
    echo '<br/><br/>permission var:<br/>'; 
    var_dump($perm); 
    echo '</pre>'; 
} else { 
    echo 'no session set'; 
} 
?> 

$ _SESSION [「燙髮」]應該包含一個數字字符串指的權限組我有(「1」的ID - >「管理」) 登錄後我手動調用腳本,並得到這樣的結果:

session var: 
array(4) { 
    ["user"]=> 
    &string(17) "sebastian.philipp" 
    ["auth"]=> 
    &bool(true) 
    ["perm"]=> 
    &string(1) "1" 
    ["llog"]=> 
    &string(19) "2013-08-21 09:48:38" 
} 


permission var: 
array(7) { 
    ["id"]=> 
    string(1) "1" 
    ["name"]=> 
    string(4) "admin" 
    ["create_pages"]=> 
    string(1) "1" 
    ["delete_pages"]=> 
    string(1) "1" 
    ["edit_pages"]=> 
    string(1) "1" 
    ["manage_users"]=> 
    string(1) "1" 
    ["manage_img"]=> 
    string(1) "1" 
} 

當刷新按F5頁面時,它返回以下結果:

session var: 
array(4) { 
    ["user"]=> 
    &string(17) "sebastian.philipp" 
    ["auth"]=> 
    &bool(true) 
    ["perm"]=> 
    &array(7) { 
    ["id"]=> 
    string(1) "1" 
    ["name"]=> 
    string(4) "admin" 
    ["create_pages"]=> 
    string(1) "1" 
    ["delete_pages"]=> 
    string(1) "1" 
    ["edit_pages"]=> 
    string(1) "1" 
    ["manage_users"]=> 
    string(1) "1" 
    ["manage_img"]=> 
    string(1) "1" 
    } 
    ["llog"]=> 
    &string(19) "2013-08-21 09:48:38" 
} 


permission var: 
bool(false) 

再次刷新的時候,是這樣的:

session var: 
array(4) { 
    ["user"]=> 
    &string(17) "sebastian.philipp" 
    ["auth"]=> 
    &bool(true) 
    ["perm"]=> 
    &bool(false) 
    ["llog"]=> 
    &string(19) "2013-08-21 09:48:38" 
} 


permission var: 
bool(false) 

所以semms像$perm被寫入$_SESSION['perm'],這是不應該的。

我在做什麼錯?

+0

通常不使用mysql_ *函數,認真使用mysqli_ *數據庫函數。其次,不要在同一行中調用'$ perm = mysql_fetch_assoc(mysql_query(..))'。將mysql_query的結果保存到它自己的變量中,然後使用while循環來獲取'mysql_fetch_assoc()' - 此外,只需要運行Login一次,在窗體上添加一個觸發器,就像使用'isset($ _SESSION)是相當不足的。 – MackieeE

+0

我以前沒有遇到過這個問題。是的,你是對的:session_start()創建會話變量,因此檢查它是沒有用的。我應該使用isset($ _ SESSION ['auth'])來代替,不是嗎? – s3lph

回答

1

什麼是您的PHP版本? 聽起來像register_globals被激活,它不應該。

+0

它的版本是5.2.17,'register_globals'確實設置爲'ON'。我無法訪問'php.ini',但如果有必要,我可以向主機發送請求。但前幾天我沒有遇到這些問題。 – s3lph