2011-11-28 118 views
1

我目前有一个基本的登录脚本。

当两个变量的用户登录定义:

$_SESSION['user_id'] = $user['user_id']; 
$_SESSION['username'] = $user['username']; 

index.php文件有这个

session_start(); 
if(array_key_exists('user_id', $_SESSION) && array_key_exists('username', $_SESSION)): 

这是所有正常,但是一旦在会话开始,我想从数据库中添加更多的值,所以我在这里有这样的代码:

$res = mysql_query($sql); 
$_SESSION = mysql_fetch_assoc($res); 

当我这样做时, ides $ _SESSION ['user_id']和$ _SESSION ['username']。 我试过这个:

$_SESSION .= mysql_fetch_assoc($res); 

但它没有工作。

有没有人有任何想法?

由于 彼得

+0

'array_merge()'? – nickb

+0

我想补充一点,这是一个坏主意。您应该只将用户标识存储在会话中,作为用户名,角色,电子邮件等等。可能会在某些时候改变。最好在每个页面上加载所需的内容。 – Xeoncross

+0

如果我这样做,那么每次加载数据的时候,网站都会变慢。除非用户更改该数据库,否则该数据库中的数据不会更改,当用户更改其帐户信息时,$ _SESSION变量将被重新定义 –

回答

5

那是因为你的变量$_SESSION的值设置为的mysql_fetch_assoc($res);返回值。

你想要做的就像$_SESSION['query_result'] = mysql_fetch_assoc($res)。如果你只是想你的数据库结果中的一列添加到会话,你会做这样的:

$res = mysql_query($sql); 
$data = mysql_fetch_assoc($res); 
$_SESSION['myKey'] = $data['myKey']; 
1

功能mysql_ *在将来会被弃用和删除,建议使用PDO或MySQLi。

一些主机已禁用这些功能。

+0

这是2年前问的:) –