自动使会话过期并检测会话在Codeigniter中是否已过期

时间:2013-05-30 02:27:50

标签: php codeigniter session trial

我在这里看到很多关于我话题的问题,但似乎我还没有找到答案。我实际需要的是当会话到期时,用户将被自动重定向到一个Your session has already expired. Please register to continue browsing.页面。

实际上我不知道如何确定用户的会话是否已经过期。这是我到目前为止所拥有的。

感谢。

function trial() {

    $this->db->select()->from('user')->where('user_type', 'tester');
    $tester = $this->db->get();

    foreach ($tester->result() as $row) {

        $data = array(
            'id' => $row->id,
            'first_name' => $row->first_name,
            'last_name' => $row->last_name,
            'display_name' => $row->display_name,
            'email' => $row->email,
            'avatar' => $row->avatar,
            'user_type' => $row->user_type,
            'logged_in' => TRUE
        );
        $this->session->set_userdata($data);
    }

    redirect(base_url(), 'refresh');
} 

5 个答案:

答案 0 :(得分:6)

您可以通过ajax调用来检查用户的会话,并将其包含在setInterval jquery's函数中,如

setInterval(function() {
  // Do something every 1 minute 
$.ajax({
type : 'POST',
url  : '<?php echo site_url("CONTROLLERNAME/check_session")?>'
success : function(data){
if(data){
   //your session is not expired
}else{
   //your session is already expired
 window.location.href="your url"; // or you can redirect from here also
} 
});
}, 60000);


 //This function checks your session 
 function check_session(){
    $id = $this->session->userdata('id');
   if($id ){
         echo 1;
   }else{
         echo 0;
   redirect('your register controller');//redirect from here or you can redirect in the ajax response
   }

  die();
 }

希望它有意义

答案 1 :(得分:1)

虽然不是100%可靠,但您可以在用户计算机上设置cookie。我建议提前一小时设置到期日。

如果会话已过期,您想知道每个页面,您可以检查cookie和会话是否都存在。如果确实......继续。如果只剩下cookie,那么您知道会话已过期,您需要将它们重定向到您在问题中引用的页面。如果两者都不存在,则存在问题,用户需要重新启动所有内容。

当然,对于会话实例化的每个页面,会话到期都将重新启动,因此您需要重置cookie。这可能有点乏味,但这是我的建议。

答案 2 :(得分:1)

您可以在会话对象中存储数据并且用户可以重定向任何页面,您可以检查会话对象是否已经存在,如果不存在则可以显示提醒,会话已过期

答案 3 :(得分:0)

启动会话时,将当前时间存储在会话变量中。您可以使用session_expire_checker函数来检查当前时间和存储时间,以确定会话是否已过期。您应该从构造函数中调用该函数,以便每个函数调用将自动使用此函数。在该功能中,如果会话过期,您将重定向到另一个控制器。

您必须为重定向的URL使用单独的控制器,否则会有无限重定向。

答案 4 :(得分:0)

会话过期时,Codeigniter不会“触发事件”。所以要么你在每个控制器函数中写一些代码来检查用户是否仍然登录。或者你在页脚中使用一些小js(我个人喜欢):

<script>
    var mins = 15 * 60;
    var active = setTimeout("logout()",(mins*1000));
    function logout()
    {
        location='/account/timeout'; // <-- put your controller function here to destroy the session object and redirect the user to the login page.
    }
</script>