目前,我正在使用下面提到的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)。
任何指向实现此逻辑的指针。
答案 0 :(得分:6)
我发现了一个jQuery插件,看起来会让你的生活更轻松。它被称为jquery-idleTimeout。
该插件有一些配置项,因此您可以根据自己的需要进行自定义...
这是一个下载库的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
?>