PHP在10分钟不活动后自动注销

时间:2013-08-17 13:51:53

标签: php html5 css3 popup session-timeout

目前,我正在使用下面提到的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)。

任何指向实现此逻辑的指针。

4 个答案:

答案 0 :(得分:6)

我发现了一个jQuery插件,看起来会让你的生活更轻松。它被称为jquery-idleTimeout。

该插件有一些配置项,因此您可以根据自己的需要进行自定义...

  • 不活动:1200000 // 20分钟默认值(显示通知前多长时间)
  • sessionAlive:300000,//默认5分钟命中alive_url,我们用于我们的ajax *接口,页面不经常更改。这有助于防止应用程序的注销屏幕出现在ajax回调中。如果将其设置为false,则不会发送。
  • alive_url:'/ path / to / your / imHere / url',//将活动ping发送到此网址
  • redirect_url:'/ js_sandbox /',//退出时去哪里
  • click_reset:true,//重置点击超时(对于ajax界面) - 重置sessionAlive计时器,因此如果我们因为其他原因刚刚执行了ajax调用,我们就不会使用alive_url来启动你的应用程序。
  • logout_url:'/ js_sandbox / timedLogout / index.html'//重定向前注销(网址,以便您可以在重定向到登录屏幕之前完全销毁会话)

这是一个下载库的github页面的链接。

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

修改

在查看源代码时我也注意到了一些东西,他们使用jquery-ui作为样式表,使它看起来像在演示中一样。

答案 1 :(得分: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
    }
}

答案 2 :(得分: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
    }

答案 3 :(得分:0)

使用php会话变量非常容易。

使用时间戳设置$ _SESSION变量并检查操作时间

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