2013-08-17 173 views
1

使用PHP代碼下面提到的網站上用戶花費目前我正在跟蹤時間:PHP自動註銷

if (!isset($_SESSION[timeset1])) 
{ 
$one_val = time(); 
$_SESSION[timeset_dummy]= $one_val; 
$two_val = time()+1; 
    $_SESSION[units_all] = array 
    (
    "year" => 29030400, 
    "month" => 2419200, 
    "week" => 604800, 
    "day" => 86400, 
    "hr" => 3600, 
    "min" => 60, 
    "sec" => 1 
); 
} 
else 
{ 
$two_val = time(); 
} 
$diff = abs($two_val - $_SESSION[timeset_dummy]); 

foreach($_SESSION[units_all] as $unit => $mult) 
    if($diff >= $mult) 
    { 
    $output .= " ".intval($diff/$mult)." ".$unit.((intval($diff/$mult) == 1) ? ("") : ("s")); 
    $diff -= intval($diff/$mult) * $mult; 
    } 

我想給後閒置8分鐘彈出用戶該會議將在未來2分鐘內過期。你能建議我如何顯示彈出窗口(最好不用Javascript,很好用CSS3 &HTML5)。彈出窗口會有警告消息「你想繼續」和一個按鈕「是」,如果按鈕沒有被點擊2分鐘自動頁面註銷腳本(PHP)將被執行。

任何指針來實現這個邏輯。

+1

這可能有助於http://www.ehow.com/how_8788319_make-popup-window-javascript.html –

回答

6

我發現了一個看起來會讓你的生活更輕鬆的jQuery插件。它被稱爲jquery-idleTimeout。

的插件有幾個配置的項目,以便您可以自定義自己的需要...

  • 閒置120萬// 20分鐘默認(多久顯示通知之前)
  • sessionAlive:300000, //默認情況下5分鐘默認命中alive_url,我們用於我們的ajax *界面,其中頁面不會經常更改。這有助於防止您的應用的註銷屏幕出現在ajax回調中。如果您將其設置爲false,則不會發送。
  • alive_url: '/路徑/到/你/ imHere/URL',//發送活着平到這個網址
  • REDIRECT_URL: '/ js_sandbox /',//去哪裏的時候註銷
  • click_reset: true,//重置點擊時的超時時間(對於ajax接口) - 重置sessionAlive計時器,所以如果我們因爲其他原因而做了ajax調用,我們不會用alive_url提示您的應用程序。
  • logout_url:「/js_sandbox/timedLogout/index.html」 //註銷重定向之前

這裏是GitHub的頁面的鏈接(URL,這樣就可以完全重定向到登錄屏幕之前銷燬會話)下載圖書館。

https://github.com/philpalmieri/jquery-idleTimeout

編輯

的東西,而看源代碼,我也注意到,他們正在使用jQuery的用戶界面作爲其樣式表使它看起來像它在演示版。

+0

感謝您的信息。這個插件非常好。它可以在所有瀏覽器中工作? –

4

據我所知,你不能在沒有javascript的情況下實現你正在尋找的東西。瀏覽器需要javascript才能知道何時打開彈出窗口。你可以使用任何你想要檢查超時的方法,或者是基本的window.setTimeout或者更高級的庫(比如tehAon的答案)。

因爲我不能發表評論我會問這裏:你的代碼似乎非常複雜,檢查用戶是否仍然活躍。有什麼特別的原因,你不能使用這樣的事情:

$_SESSION['last_activity'] = time(); 

function check_if_logged_in() { 
    if(time() - $_SESSION['last_activity'] > 600) { // 10 minutes but you could use 480 for 8 minutes 
     // Do redirect or take other action here 
    } 
} 
0
if(time() - $_SESSION['timestamp'] > 900) { //15 minute subtract new timestamp from the old one 
     $_SESSION['logged_in'] = false; 
     session_destroy(); 
     header("Location: " . index.php); //redirect to index.php 
     exit; 
    } else { 
     $_SESSION['timestamp'] = time(); //set new timestamp 
    } 
0

這是PHP會話變量很容易。時間戳

集$ _SESSION變量,並檢查與作用時間

<?php 
session_start(); 
if(time()-$_SESSION['time']>600) 
unset($_SESSION['time']); 
else 
$_SESSION['time']=time();//updating with latest timestamp 
?>