繁体   English   中英

一定时间后注销

[英]Logging out after certain amount of time

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

这是使用Javascript需要实现的吗?

您可以只使用html meta标签:
<meta http-equiv="refresh" content="1000;url=buy.aspx">
放在头上
其中1000是以秒为单位的时间,而url是要重定向的URL。

昨天刚刚回答了这个问题 ... OP希望在一定时间后询问,用户是否希望保持登录状态。

对于未经任何确认的纯重定向,您可以使用简单的setTimeout调用:

var minutes = 30;
setTimeout(function(){location.href = 'logout.php';}, minutes*60*1000); 

您真的出于某种原因想要重定向吗?

通常,每个用户会话都有一个关联的时间戳。 然后,您可以确保该用户的会话尚未过期,或者要求他们登录。实际上,您只是在确保会话有效。

如果您将某人重定向到注销页面,则实际上并没有实现任何目的。 您还需要确保会话没有在服务器端超时。 客户端中的任何内容(包括重定向到注销页面)都不可靠,可以绕开。

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();
}

如果用户开始在页面上输入表单并且在您的超时期限内未完成怎么办? 到目前为止,我以其他答案中未描述的其他方式来处理不活动。

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秒,它就会调用一次interval函数以查看其是否超时。

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控件清除数据库行锁。

关键是输入和文本区域绑定,因此,如果用户在表单中输入任何内容,将重置超时,并且还有10分钟的时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM