2011-03-04 101 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