2013-08-17 134 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 
?>