2011-03-04 103 views
0

我想要的代码片断PHP会话锁定

echo "This is a test"; 

进行每小时一次打印。所以当用户第一次使用index.php时应该打印它。当用户立即重新加载页面时,它应该消失。一小时后应再次打印... 我该怎么做?谢谢。

回答

0

您可以将当前时间设置为$ _SESSION变量,并且如果用户更改页面,请检查会话时间变量。 并且如果该时间大于一个小时比显示消息

4

这应该工作:

session_start(); 

if (!isset($_SESSION["last_shown"]))    // If the session variable 
               // was never set 
or ($_SESSION["last_shown"] < (time() - 3600)) // or was set more than 
               // 1 hour (3600 secs) ago 
{ 
    echo "This is a test";       // Make output 
    $_SESSION["last_shown"] = time();    // Update session variable 
               // with current time 
} 
+0

看起来非常好。第5行我认为太多了。 – SandyBr 2011-03-04 20:20:56

+0

@Sandy修,谢谢! – 2011-03-04 20:25:50

+0

如果您忘了在一个小时后忘记运行脚本,例如1小时半之后,这将不起作用。 – Artefact2 2011-03-04 20:31:06

3

而不是会话,设置Cookie在1小时内到期。在页面加载时,如果cookie存在,则不显示消息。会话的优势在于用户可以关闭浏览器并稍后返回(如果需要)

if (!isset($_COOKIE['sesslock'])) 
{ 
    // No cookie - show message & set cookie (expires in 1 hour, 3600sec) 
    setcookie('sesslock','ok', time()+3600); 
    echo "this is a test"; 
} 
else 
{ 
    // The cookie is there, don't display your message 
} 
+1

不错的选择。也适用于竞赛条件 – 2011-03-04 20:16:37

+0

应该工作,除非用户的偏执狂,并在浏览器关闭时删除所有Cookie。但是,这个用户的会话方法也会失败。 – 2011-03-04 20:30:13

+0

然而,就每小时运行而言,这与我的方法有相同的问题 - 它不会计算完全相同的每分钟时间,而是从用户提出请求时算起 – 2011-03-04 21:10:20