php会话锁

php会话锁,php,session,Php,Session,我想要代码片段 echo "This is a test"; 每小时打印一次。因此,当用户第一次加载index.php时,应该打印它。当用户立即重新加载页面时,它应该消失。一小时后,它应该再次打印。。。 我该怎么做?谢谢。您可以将当前时间设置为$\u会话变量,如果用户更改页面,请检查会话时间变量。 如果该时间大于一小时,则显示消息,这应该可以: session_start(); if (!isset($_SESSION["last_shown"])) // If t

我想要代码片段

 echo "This is a test";
每小时打印一次。因此,当用户第一次加载index.php时,应该打印它。当用户立即重新加载页面时,它应该消失。一小时后,它应该再次打印。。。
我该怎么做?谢谢。

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

,这应该可以:

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
 }

将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
}

一个不错的选择。此外,除非用户的偏执狂在浏览器关闭时删除了所有cookie,否则对竞争条件免疫也应该有效。但是,对于这个用户来说,会话方法也会失败。但是,就每小时运行一次而言,这与我的方法有着相同的问题——它不会计算每小时的同一分钟,但从用户发出请求时开始,我是如何理解这个问题的。每小时执行一次脚本确实要复杂得多。如果您忘记在一小时后运行脚本,例如在一个半小时后运行脚本,这将不起作用。@Sandy mmmm,@artifact很有道理!下一个计数器将在用户发出请求一小时后开始倒计时,这可能不是您想要的。真正做到每小时一次更难。这取决于你想要什么。@Sandy@Michael的答案也有同样的问题