如何在用户空闲codeigniter时检查会话是否已过期

时间:2017-02-14 14:08:47

标签: codeigniter codeigniter-3

我想检查用户是否idle for more than 5 minutes,他们会be redirected to login page。我不知道这样做的最佳做法。给我解决方案。我用codeigniter编码。

3 个答案:

答案 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分钟检查一次。