我目前正在处理来自PHP Web应用程序的超时:
<meta>
标记,在15分钟和5秒后刷新页面(因此“调用”超时检查)我现在正在考虑为用户添加更好的控制权,例如,如果他们恰好在一个页面上工作了很长一段时间,并且我正在考虑允许弹出窗口在大约两分钟之前出现超时。然后,弹出窗口可以选择继续会话(进行AJAX调用以刷新会话中的最后一个活动)或注销。如果忽略弹出窗口(例如,如果用户位于不同的页面上),则用户将被注销。
根据Using Javascript to override or disable meta refresh tag,我将无法重置<meta>
标记,这可能意味着我必须删除标记。 PHP/Javascript Session Timeout with warning唯一的答案建议使用JavaScript调用重定向到登录页面,但是可以通过禁用JavaScript来规避这一点。
我正在考虑的是围绕<meta>
重定向标记<noscript>
(因为我使用的是HTML5),所以即使用户不使用JavaScript,他们也会仍然超时。这也将删除<meta>
标记,以触发用户是否决定继续其会话。
这种方法有意义吗?我错过了什么吗?还有另一种方法会更有意义吗?
我当前的代码
<?php
require_once("include/session.php");
require_once("include/sessioncheck.php");
?>
<html>
<head>
<meta http-equiv="refresh" content="<?= TIMEOUT_MIN * 60 ?>" />
<!-- additional tags -->
</head>
<body>
<!-- content -->
</body>
</html>
答案 0 :(得分:2)
我最终做的是将sessioncheck.php代码留下并删除<meta>
标记。然后我在关闭正文标记之前添加了以下内容:
<div id="timeout-warning"></div>
<div id="timeout-warning-text">Your session is set to expire in less than one minute
due to inactivity. Click <a href="javascript:void(0)" id="timeout-restart">
here</a> to keep your session alive.</div>
<script type="text/javascript">
var timeoutWarning;
var timeout;
$(document).ready(function() {
$("#timeout-restart").click(function() {
clearTimeout(timeout);
timeout = setTimeout(function() {
document.location.reload(false);
}, 1801000);
timeoutWarning = setTimeout(function() {
$("#timeout-warning").fadeTo(2000, 0.5);
$("#timeout-warning-text").fadeIn(2000);
}, 1740000);
$("#timeout-warning").hide();
$("#timeout-warning-text").hide();
return false;
});
timeoutWarning = setTimeout(function() {
$("#timeout-warning").fadeTo(2000, 0.5);
$("#timeout-warning-text").fadeIn(2000);
clearTimeout(softTimeout);
}, 1740000);
timeout = setTimeout(function() {
document.location.reload(false);
}, 1801000);
});
</script>
1740000和1801000数字来自PHP const,恰好是基于半小时的超时。