在一定时间后退出

时间:2009-08-11 06:44:52

标签: php javascript

在X秒不活动后,从PHP应用程序注销用户(所以基本上只是执行重定向)的最佳方法是什么?对于“不活动”,我会计算最后一页加载的时间,如果当前时间超过X秒,请执行重定向。

这是否需要使用Javascript实现?

4 个答案:

答案 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分钟。