2013-08-21 33 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