我想检查用户是否idle for more than 5 minutes
,他们会be redirected to login page
。我不知道这样做的最佳做法。给我解决方案。我用codeigniter编码。
答案 0 :(得分:2)
只需将last_visited
时间戳存储为会话变量即可。下次用户访问时,检查当前时间戳与会话中的时间戳的差异。如果超过5分钟,请退出用户。
$this->load->library('session');
$this->session->set_userdata(array(
'last_visited' => time()
));
答案 1 :(得分:2)
这可以通过jQuery / javascript / Ajax和Codeigniter函数的组合来完成。
<强> JS 强>
<script type="text/javascript">
var currentSessionValue = 1;
// pseudo code
setTimeout(checkSession, 5000);
function checkSession() {
$.ajax({
url: "CheckSession/check_session", //Change this URL as per your settings
success: function(newVal) {
if (newVal != currentSessionValue);
currentSessionValue = newVal;
alert('Session expired.');
window.location = 'Your redirect login URL goes here.';
}
});
}
</script>
<强>笨强>
class CheckSession extends Controller{
public function __construct(){
session_start();
}
public function check_session(){
//Below last_visited should be updated everytime a page is accessed.
$lastVisitTime = $this->session->userdata("last_visited");
$fiveMinutesBefore = date("YmdHi", "-5 minutes");
echo date("YmdHi", strtotime($lastVisitTime)) > $fiveMinutesBefore > 1 : 0;
}
}
答案 2 :(得分:0)
我通过简单地尝试读取我在登录
上存储的变量来检查会话到期我将其放在文件夹My_Controller
中的application/core
中,并根据此扩展我的所有其他控制器。
function _is_logged_in()
{
return !empty($this->session->userdata('user_id'));
}
在我班上,__construct
我这样做
if (!$this->_is_logged_in()) {
$this->_log_out("Session Expired", base_url("login"));
}
所以当我提出请求时,如果会话已经过期,它会重定向到登录,不需要每隔5分钟检查一次。