在X秒不活动后,从PHP应用程序注销用户(所以基本上只是执行重定向)的最佳方法是什么?对于“不活动”,我会计算最后一页加载的时间,如果当前时间超过X秒,请执行重定向。
这是否需要使用Javascript实现?
答案 0 :(得分:6)
您可以使用html元标记:
<meta http-equiv="refresh" content="1000;url=buy.aspx">
把它放在头上
其中1000是秒的时间,url是重定向的URL。
答案 1 :(得分:5)
昨天刚回答this question ... OP希望在一定时间后询问用户是否希望保持登录状态。
对于没有任何确认的普通重定向,您可以使用简单的setTimeout调用:
var minutes = 30;
setTimeout(function(){location.href = 'logout.php';}, minutes*60*1000);
答案 2 :(得分:1)
出于某种原因,你真的想要重定向吗?
通常每个用户会话都有一个关联的时间戳。然后确保用户的会话未到期,或要求他们登录。因此,实际上,您只是确保会话有效。
如果您将某人重定向到退出页面,那么您实际上并没有实现任何目标。您还需要确保会话没有超时服务器端。客户端的任何东西,包括重定向到注销页面,都是不可靠的,并且可以被规避。
PHP中最简单的形式:
<?php
session_start();
$session_lifetime = 60*60; // 1 hour
if (!isset($_SESSION['time']) || !$_SESSION['time']) {
$_SESSION['time'] = time();
}
if (time() - $_SESSION['time'] > $session_lifetime) {
// session has expired
$_SESSION['user'] = null;
$_SESSION['time'] = null;
} else {
// keep session alive
$_SESSION['time'] = time();
}
答案 3 :(得分:1)
如果用户开始在页面上输入表单并且还没有在您的超时期限内完成,该怎么办?到目前为止,我用其他方式描述的方式处理不活动。
var rowLockSeconds = 0;
function startRowLockTimer()
{
setInterval("incrementRowLockTimer()",60000);
$("input").keypress(function (e) { rowLockSeconds=0; }).click( function() { rowLockSeconds=0; });
$("textarea").keypress(function (e) { rowLockSeconds=0; }).click( function() { rowLockSeconds=0; ; });
window.onbeforeunload = function obul() { if (hasChanged) { return 'You will lose any unsaved changes you\'ve made.'; } }
window.onunload = clearRowLock;
}
因此,当他们登录时,行锁定计时器从0开始。每隔60秒,它会调用间隔函数以查看它是否已超时。
function incrementRowLockTimer()
{
rowLockSeconds = rowLockSeconds+60;
// 10 minute timer to clear someone out of a page if there has been no activity
if (rowLockSeconds >= 600)
{
window.onbeforeunload=null;
// clear rowLock with request here
$.get('../ajax/rowLock-server.php?do=delete&rowLockID='+currentRowLockID+'&userUUID='+currentUserUUID, function() {
alert('You have been logged out of this page after 10 minutes of inactivity.');
document.location.href='../main.php';
});
}
}
AJAX控件清除数据库行锁。
键是输入和textarea绑定,因此如果用户在表单中键入任何内容,则重置超时,并且还有10分钟。