我现在有一个问题,当用户登录时,他们的用户对象存储在会话变量中,比每次进行数据库调用都快。我遇到的问题是,如果某些更新(比如它们的点数)有更新,我无法修改该会话变量,我只能更新表中的行。PHP会话变量 - >访问另一个唯一标识
有没有什么办法让PHP访问该会话变量,因为它是唯一的标识符,而不是从他们的cookie中读取?或者,最好是检查数据库中的某个标志,并且如果标志已设置,则更新所有信息?
我现在有一个问题,当用户登录时,他们的用户对象存储在会话变量中,比每次进行数据库调用都快。我遇到的问题是,如果某些更新(比如它们的点数)有更新,我无法修改该会话变量,我只能更新表中的行。PHP会话变量 - >访问另一个唯一标识
有没有什么办法让PHP访问该会话变量,因为它是唯一的标识符,而不是从他们的cookie中读取?或者,最好是检查数据库中的某个标志,并且如果标志已设置,则更新所有信息?
你需要从一个集中的斯道阅读ge(与会话相反)。如果可以的话,你应该避免数据库调用。使用高速缓存和插入更新缓存:
然后我们就大功告成了,让我们再次尝试循环:
我们在这里保存了很多数据库调用。
缓存一些可能的引擎是:
如果你在共享主机,或无法获得PHP具有良好的引擎缓存编译,writing to files可以完成这项工作。
我的建议是创建自定义对象,该对象将保存例如5分钟的数据并且将被重新加载。只需创建一个对象,它将从会话中加载数据,如果加载的对象超过五分钟,只是重新加载数据。
我认为这可以解决您的问题
class MySession
{
public $Duration = 0;
public $Loaded = 0;
public static function Load()
{
$obj = null;
if(isset($_SESSION["my_session"]))
{
$obj = deserialize($_SESSION["my_session"]);
if((time()-$obj->Loaded)>$Duaration)
$obj = self::LoadObject();
}
else { $obj = self::LoadObject(); }
$obj->Save();
return $obj;
}
public function Save()
{
$_SESSION["my_session"] = serialize($this);
}
public static function LoadObject()
{
$obj = new MySession();
$obj->Loaded = time();
//logic for updating data
return $obj;
}
}
我不太清楚你的意思是“在他们的最后”。你的意思是说,如果某些用户数据异步更改(而不是响应用户的操作),那么你想更新数据,但不能写入会话? – 2011-01-28 18:34:40