因此,为了最大限度地减少查询,同时保持安全,我认为会话变量只有在自上次查看该页面超过十五分钟后才会从数据库更新。我写了一些代码,我希望你们在我尝试实现它之前先看看它吗?
if(!isset($_SESSION['time_next'])){
$_SESSION['time_next'] = time() + (15 * 60);
//15 minutes
}
else if(time() >= $_SESSION['time_next']){
//update all the session variables, etc...
$_SESSION['time_next'] = time() + (15 * 60);
}
你怎么看?这有用吗?
答案 0 :(得分:1)
它会起作用,但你可以写得更短更干净*。请注意,该会话是访问者绑定的,因此当10个人请求该页面时,您将获得10个运行更新的实例。
do_update_if_needed(15);
function do_update_if_needed($minutes)
{
if ( isset($_SESSION['time_next']) && time() < $_SESSION['time_next'] ) return;
// either time_next was not set, or it's time to update, so set next time:
$_SESSION['time_next'] = time() + $minutes*60;
// do your thing!
}
您还可以编写一个包含上次(或使用其上次修改时间)的简单文件。一般来说,我认为记录最后时间比下一个时间更好,因为 last 时间实际上告诉已发生的事情,而不是只是“一个计划”(导致问题,比如谁的计划是什么?为什么?等等)
*清洁是指:1)将它放在一个函数中,2)在一个地方进行计算,而不是在if
答案 1 :(得分:0)
你可能想为这类事情创建DAEMONS
。
你肯定不应该像往常一样,因为其他人有更好的解释。
你也不应该使用cron ,因为如果这个过程花费的时间超过你认为应该花费的时间,那么它将会覆盖其他进程。这可能会使你的应用程序变得混乱,这真的不是一个优雅的解决方案。
deamon
将以无声的方式在后台运行。将处理您需要的所有工作量,不会覆盖自己,也可以在预先设定的时间内运行。
<强> Take a look at this excellent tutorial by Kevin van Zonneveld 强>