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

时间:2010-01-17 16:42:27

标签: 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');
$_SESSION['groupid'] = mysql_result($result, 0, 'group_id');
$_SESSION['style'] = mysql_result($result, 0, 'style');

或者只是在会话中存储ID然后在所有页面上查询:

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

2 个答案:

答案 0 :(得分:2)

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

如果您喜欢使用memory_get_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

所以你可以看到存储这么多数据真的非常简单。

另请参阅: Cache data in PHP SESSION, or query from db each time?

答案 1 :(得分:2)

我为每个用户创建一个(盐渍)哈希,保存在db:

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

然后将哈希存储在会话中。这样,您每次都可以调用用户数据。如果用户更改了他/她的某些数据,这样做的好处是不必更新会话。