Php 在登录时存储所有用户信息

Php 在登录时存储所有用户信息,php,Php,登录时是否最好将所有用户信息存储在会话cookie中?而不是使用大量的查询 $_SESSION['id'] = mysql_result($result, 0, 'id'); $_SESSION['name'] = mysql_result($result, 0, 'name'); $_SESSION['email'] = mysql_result($result, 0, 'email'); $_SESSION['ip'] = mysql_result($result, 0, 'regip');

登录时是否最好将所有用户信息存储在会话cookie中?而不是使用大量的查询

$_SESSION['id'] = mysql_result($result, 0, 'id');
$_SESSION['name'] = mysql_result($result, 0, 'name');
$_SESSION['email'] = mysql_result($result, 0, 'email');
$_SESSION['ip'] = mysql_result($result, 0, 'regip');
$_SESSION['groupid'] = mysql_result($result, 0, 'group_id');
$_SESSION['style'] = mysql_result($result, 0, 'style');
或者只需在会话中存储ID,然后在所有页面上查询:

select * from users where id = $_SESSION['id']

如果你要经常使用它们,当然。尽管我会小心地在会话中存储所有用户数据。只有必要的。请记住,编写良好的查询在资源上很便宜。不要试图完全避免连接到数据库,只要确保在连接时,您做得很好

如果您喜欢使用
memory\u get\u usage()
,可以测试内存消耗。但请注意,会话数据存储在系统本身的平面文件中:

session_start();
echo memory_get_usage(); // 87744
$_SESSION["user"] = array(
    "name"    => "Jonathan Sampson",
    "id"      => 54680,
    "groupID" => 0285,
    "email"   => "example@somesite.com",
    "style"   => "background-color:#333;color:#f1f1f1"
);
echo memory_get_usage(); // 88344
所以你可以看到,存储这么多的数据是非常简单的

另请参见:

我将为每个用户创建一个(盐渍)哈希,保存在数据库中:

$salt = 'asdjnvdskflds';
$hash = md5($salt . $email);

然后将散列存储在会话中。这样,每次都可以调用用户数据。这还有一个好处,即如果用户更改了某些数据,则不必更新会话。

我同意。我通常只保存
用户ID
,并使用它(+其他环境变量)从数据库中获取用户的详细信息。+1:在我看来,会话的候选信息应该是每个页面所需的信息。否则,根据需要返回数据库。但是如果用户更改了他们的电子邮件地址怎么办?开发人员必须记住修改会话变量。如果您每次只保存用户id,但从数据库中获取其余的id,那么您不必担心这一点。没错。如果您为用户提供了更改数据的功能,那么您可能不应该将其存储在会话中。我在基于文件的会话中为每个用户缓存了大约10个值,我没有意识到这不好,看起来数据量太小了。也许我应该重新考虑一下这个问题,也可能需要查看memcache,然后您可以将其存储在内存中