我是codeigniter框架的新手,我不知道内置会话是如何工作的。我想要的是,当会话到期时,用户将被重定向到登录页面。我检查了谷歌和其他stackoverflow问题的答案,并尝试了他们的每个代码,但它不起作用。在本机php会话中,我只需要指定如果会话在给定时间内到期然后重定向,但是当我在codeigniter中应用它时它不起作用。我还不知道如何在config中检索会话到期值,以将其与用户在其记录的会话期间累积的当前时间进行比较。请帮帮....
这在控制器中起作用
public function check_session()
{
$logged_in = $this->session->userdata('logged_in');
if(!$logged_in)
{
$this->logout();
}
}
这是ajax:
setInterval(function(){
$.ajax({
type: 'POST',
url: "<?php echo site_url('tms/check_session');?>",
success: function(data){
console.log(data);
}
});
},300);
答案 0 :(得分:2)
首先,在application/core
下创建一个核心控制器。你可以称之为MY_Controller.php
以下是MY_Controller.php的示例:
class User_Controller extends CI_Controller {
public function __construct()
{
parent::__construct();
if ($this->session->userdata['logged'] == TRUE)
{
//do something
}
else
{
redirect('login'); //if session is not there, redirect to login page
}
}
}
创建您的控制器类,如下所示:
class Someclass extends User_Controller
此外,您应该传递一个名为&#34; logged&#34;的值。在你的会话数组中。 E.g:
$session = array('id' => $id, 'logged' => TRUE);
$this->session->set_userdata($session);
现在,如果会话结束,系统会将用户重定向到登录页面。如果你想通过JavaScript创建这个会话控件,你应该为它编写一些代码。顺便说一句,我并没有暗示这一点。您不需要增加系统的工作量。使用我的代码,如果会话在用户想要访问另一个页面时结束,系统会将他踢出去。
public function check_session()
{
if(!$this->session->userdata['logged'])
{
redirect('someurl');
}
}