我试图在一段时间后将用户从我的CMS中注销。通过非活动,我的意思是没有点击鼠标或键入键盘。因此,在30分钟不活动后,我的注销功能就会运行。
我正在使用的CMS内置了一个注销功能 -
<?php
session_start();
if (isset($_SESSION['user_id'])){
$login = 1;
}else{
$login = 0;
}
function confirm_logged_in() {
if (!isset($_SESSION['user_id'])) {
//redirect
header("Location: /_cms/login.php?login=0");
}
}
function logout(){
$_SESSION = array();
if(isset($_COOKIE[session_name()])){
setcookie(session_name(), '', time()-4200, '/');
}
session_destroy();
}
?>
其他人写了这段代码并且有效。但是,我不知道注销非活动用户所需的确切时间。预设时间是 - 4200.我想知道的是退出需要多长时间,以及我是否可以将其更改为我想要的任何时间。有人可以建议吗?
答案 0 :(得分:1)
-4200只是为了销毁cookie。通过为他们设置过去的时间来销毁Cookie。因此,向后设置4200秒与向后设置一秒有效。
要注销用户,有多种方法。您可以使用上一个活动时间设置自己的cookie(每次用户访问页面时设置时间)。在每个脚本的开头包括一个函数,它获取此cookie并检查应包含最后一个活动时间的值。如果此时间早于允许的非活动时间,则销毁此cookie并销毁会话,如果没有,则将值更新为当前时间。
当然,您也可以在会话内部存储最后一个活动时间,这是一种更有效的方法,可以消除cookie传输和管理的开销。
修改强>
以下是检查上一个活动时间并注销用户的最小代码:
function login(){
//check login username/pass etc...
$_SESSION['last_active_time'] = time();
}
function auth(){
if($_SESSION['last_active_time'] < (time() - 1800)){ //1800 is 30 minutes (time in seconds)
logout(); //destroy the session in the logout function
}
else{
$_SESSION['last_active_time'] = time();
}
//do some auth related things
}
这是这背后的基本逻辑。当然,您需要实现其他所需的东西以及安全性,检查等....
答案 1 :(得分:0)
我会尝试回答你的问题并提出一些问题。
现在,您想要的是在30分钟不活动后,用户应该退出。您当前的代码不是为此而构建的。您应编写逻辑以继续检查上一个活动时间,如果超过30分钟,则应调用注销功能。现在的问题是,该怎么办?我只是稍微修改你的代码
if (isset($_SESSION['user_id'])){
$login = 1;
// If the user has performed action within 30 minutes
if($_SESSION['last_active_on'] > (time() - (30*60))){
$_SESSION['last_active_on'] = time(); // Re-set the current time as Last Active
}else{
// User has done some action after 30 minutes.
logout(); // Invoke the Logout functionality
}
}else{
$login = 0;
}
请记住: time()返回自Unix Epoch(1970年1月1日00:00:00 GMT)以来的秒数测量的当前时间。
您尚未在此处添加登录功能。你应该修改你的登录功能,并且应该再添加一行
$_SESSION['last_active_on'] = time();
还有一件事。只有在将请求发送到服务器时才会发生这一切。例如:假设在下午4:00,由于某些操作,有一个服务器调用。假设在4:25您正在移动鼠标光标或单击页面上的任何位置,但如果它没有向服务器发送任何请求,则认为它本身处于非活动状态。并且在下午4:35如果用户做了将请求发送到服务器[正常请求或Ajax]的事情, 然后根据服务器,它是35分钟无效状态,因此它将注销。希望这能回答你的问题。
您甚至可以参考SO问题:User Inactivity Logout PHP它也可以帮助您。