2011-06-01 30 views
2

我有一個網站,我必須實現(使用PHP和/或JavaScript)在訪問者進入網站後觸發兩分鐘的警報消息。我搜索了,但我發現的所有解決方案都是爲了一個獨特的頁面。我需要定時器計數器在用戶進入我的網站時啓動,無論通過哪個頁面。我需要該計數器在用戶瀏覽我網站的頁面時不斷計數。知道用戶在我的網站的實時

一個解決方案可能是使用會話變量。我可以創建一個查找這個變量的腳本,如果它不存在就意味着用戶正在進入該站點。然後我用當前時間設置這個變量。它在每個頁面中的腳本,它將每x秒通過AJAX讀取此變量,並且我會在兩分鐘後知道用戶何時在我的網站中。

我不知道它是否正確(我還沒有實現),但我不確定會話是否是最好的方法。如果用戶離開頁面但打開了其他導航窗口,則會話不會過期,並且如果他再次進入該站點,則計數器不會被重置。

於是,兩個問題:

  1. 是否有更好的方法來對實體進入 和退出 更多的控制權?
  2. 如果不是,我的以上 方法對不對?

謝謝。

+0

你的想法很好,但我會建議在JavaScript中使用cookie來實現相同的想法。 1)在第一次加載時,檢查您的cookie是否已經存在,如果沒有,請將其設置爲當前時間(請注意,服務器和客戶端時間可能會有所不同,因此將時間全部用一個時鐘來計算)。 2)第一次使用setTimeout(...)2分鐘(2分鐘減去重新加載頁面時cookie時間和當前時間之間的差異)。 – mkilmanas 2011-06-01 11:41:40

+0

但是,如果我創建一個cookie,當用戶離開我的網站,然後重新輸入,cookie將保持不變,我將無法知道它是否輸入。我錯了嗎? – mariogl 2011-06-01 11:46:51

+0

如果document.referrer不是重置cookie的站點,您可以設置邏輯。最簡單的方法是檢查它是否包含您的域名。 – agmcleod 2011-06-01 11:50:33

回答

1

像這樣的東西應該工作。

$alert_message = false; 

if(!isset($_SESSION['time_entered'])){ 
    $_SESSION['time_entered'] = time(); 
} 

if($_SESSION['time_entered'] =< time() - 120){ 
    if(!isset($_SESSION['message_sent'])){ 
     $alert_message = true; 
     $_SESSION['message_sent'] = true; 
    } 
} 

而且在<head>

<?php if($alert_message):?> 
<script type="text/javascript">alert("You've been here for at least two minutes.");</script> 
<?php endif;?> 

另外,還要確保你在每一個腳本的頂部有session_start()

+0

謝謝,卡爾。這是我的方法的實施,但我想知道是否有辦法實際控制進入和退出,因爲會議不(我認爲)。 – mariogl 2011-06-01 11:45:06

+0

沒有。除非會話被用戶關閉,否則註銷。 – 2011-06-01 13:08:58

+0

我認爲這會在所有頁面上觸發(如果用戶同時打開了多個頁面),所以如果沒有AJAX,你就無法做到這一點。 – XzKto 2011-06-01 13:21:55

1

你並不需要AJAX,你只需要存儲在會話變量的時間,然後包括在每一頁上一些JavaScript,這裏有一個例子:

<?php 
session_start(); 

$time = microtime(true); 

if (!$_SESSION['foo']) { 
    $_SESSION['foo'] = (microtime(true)+120); 
} 
?> 
<script type="text/javascript"> 
    var timeoutID = setTimeout(function() { 
     alert('two minutes have passed'); 
    }, <?php echo bcsub($_SESSION['foo'], $time)*1000 ?>); 
</script> 

你會需要一些額外的邏輯這樣在120秒之後它不會繼續發射。