将它存储在会话或查询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;
没有结果。
只将数据存储在用户特定的会话中。不要将会话用作缓存。不好的事情会来自于此(例如由于数据重复而吞噬大量磁盘空间)。
如果它是用户特定的,那么我会将它存储在一个会话中,只要它相当小并且经常需要它(我不会在会话中存储大于10kb左右的任何内容)。如果你不经常需要它,那么不要存储它。
如果它不是用户特定的,则使用缓存层。您可以使用原始的APC/Memcached,或者您可以使用抽象层,如Cache_Lite或Zend_Cache ...
例如,我可以在会话中存储配置文件信息吗?所以姓名,年龄,性别,用户名,电子邮件等。 – jasonaburton
@jason:当然。将用户对象存储到会话中很常见。但我不会储存太多。一些文字或小物体是好的,但我不会存储他们的发布历史... – ircmaxell
哦,我不打算存储他们的整个发布历史。现在,我的问题是如何在会话中存储对象?我研究过它,并被告知我需要序列化和反序列化对象,但这对我没有任何作用。我不知道我做错了什么。 – jasonaburton
我会说:
- 如果数据经常变化,而且每个用户都需要有一个始终保持最新的值,你可能会想如果日期从数据库
- 查询不改变,或改变不需要被立刻看出:
如果存储到会话,你应该有序列化/反序列化你自己:它已经由会话mecanism 完成(请注意,某些数据类型不能被序列化 - 请参阅Sessions)。
如果存储到缓存(APC,memcached,files,...),您通常需要序列化/反序列化,因为这些缓存机制不知道如何存储PHP对象。
每个用户的数据都不相同。我如何才能在会话中存储该信息? – jasonaburton
那么,这个神秘物体是什么? –
考虑项目的主机。如果您托管在使用负载平衡并且获得大量命中的大型服务器场中,那么无论如何您最好将会话存储在数据库中。 –
不会在数据库中存储会话仍需要我查询数据库吗? – jasonaburton