将它存储在会话或查询DB中每页加载?

问题描述:

哪条路要走?将它存储在会话或查询DB中每页加载?

我是否应该将会话存储在会话中并将其从页面传递到页面,或者每次用户迁移到我的Web应用程序中的其他页面时,是否应该查询数据库?

如果我应该在会话中存储我的对象,我该怎么做呢?我试着用序列化和反序列化来做,但它不适合我...

感谢您的帮助!

编辑:下面是我的一些代码

Page 1: 
include "user.php"; 
session_start(); 
$user = new user(); 
$user->$username = "Jason"; 
$_SESSION["user"] = $user; 
header("Location: profile.php"); 

Page 2: 
include "user.php"; 
session_start(); 
$user = new user(); 
$user = $_SESSION["user"]; 
echo $user->$username; 

没有结果。

+0

那么,这个神秘物体是什么? –

+0

考虑项目的主机。如果您托管在使用负载平衡并且获得大量命中的大型服务器场中,那么无论如何您最好将会话存储在数据库中。 –

+0

不会在数据库中存储会话仍需要我查询数据库吗? – jasonaburton

只将数据存储在用户特定的会话中。不要将会话用作缓存。不好的事情会来自于此(例如由于数据重复而吞噬大量磁盘空间)。

如果它是用户特定的,那么我会将它存储在一个会话中,只要它相当小并且经常需要它(我不会在会话中存储大于10kb左右的任何内容)。如果你不经常需要它,那么不要存储它。

如果它不是用户特定的,则使用缓存层。您可以使用原始的APC/Memcached,或者您可以使用抽象层,如Cache_LiteZend_Cache ...

+0

例如,我可以在会话中存储配置文件信息吗?所以姓名,年龄,性别,用户名,电子邮件等。 – jasonaburton

+0

@jason:当然。将用户对象存储到会话中很常见。但我不会储存太多。一些文字或小物体是好的,但我不会存储他们的发布历史... – ircmaxell

+0

哦,我不打算存储他们的整个发布历史。现在,我的问题是如何在会话中存储对象?我研究过它,并被告知我需要序列化和反序列化对象,但这对我没有任何作用。我不知道我做错了什么。 – jasonaburton

我会说:

  • 如果数据经常变化,而且每个用户都需要有一个始终保持最新的值,你可能会想如果日期从数据库
  • 查询不改变,或改变不需要被立刻看出:
    • 如果每个用户的数据是不同的,你可以将其存储在会议(如会话是每用户)
    • 如果数据是相同的所有的用户,你应该使用另一个缓存mecanism (如APC,或memcached,由所有用户共享,避免重复


如果存储到会话,你应该有序列化/反序列化你自己:它已经由会话mecanism 完成(请注意,某些数据类型不能被序列化 - 请参阅Sessions

如果存储到缓存(APC,memcached,files,...),您通常需要序列化/反序列化,因为这些缓存机制不知道如何存储PHP对象。

+0

每个用户的数据都不相同。我如何才能在会话中存储该信息? – jasonaburton