我目前处理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>发布于 2013-03-08 17:36:01
我最后所做的就是把我的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,而PHP恰好基于半个小时的超时。
https://stackoverflow.com/questions/15147118
复制相似问题