1

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

4 回答 4

7

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

该插件有一些配置项,因此您可以根据自己的需要对其进行自定义……</p>

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

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

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

编辑

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

于 2013-08-17T14:10:28.860 回答
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
    }
}
于 2013-08-17T14:39:28.463 回答
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
    }
于 2014-07-10T20:46:01.597 回答
0

使用 php session 变量这很容易。

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

<?php
session_start();
if(time()-$_SESSION['time']>600)
unset($_SESSION['time']);
else
$_SESSION['time']=time();//updating with latest timestamp
?>
于 2016-02-22T17:56:25.323 回答