最好是在登录时将所有用户信息存储在会话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']
答案 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);
然后将哈希存储在会话中。这样,您每次都可以调用用户数据。如果用户更改了他/她的某些数据,这样做的好处是不必更新会话。