2013-02-26 58 views
2

我正在创建一个帮助台系统,有时用户在不使用系统的情况下获得两个多小时的时间,然后在会话过期时返回,但上次加载的页面仍保留在屏幕上例如一个表单),用户可以正常使用它,但是当他提交表单时,他会被重定向到登录页面(没关系),但是用户会丢失输入的数据。 我想创建一个AJAX函数来检查会话是否过期。该功能应使用setTimeout()setInterval()执行。 我试过使用"sess_expiration",但似乎这个值不会在页面加载时重置,即在结束指定的时间(默认为7200)之后它强制会话过期。检查Codeigniter会话是否已过期AJAX

回答

4

你可以像下面这样做

$.ajax({ 
type : 'POST', 
url : '<?php echo site_url('controllername/methodname')?>' 
success : function(data){ 
    if(data){ 
     //session available 
    }else{ 
     // expired 
    } 
}); 

和控制器的方法

function methodname(){ 
     $user_id = $this->session->userdata('user_id'); 
     if($user_id){ 
      echo 1; 
     }else{ 
      echo 0; 
     } 
} 

您可以在功能上包裹Ajax请求,并与TRUE或FALSE返回结果每次。而且setInterval可以调用这个函数来检查会话。

+0

[另一个答案已经被后来几乎相同的代码,并在这里'setInterval'给出](http://stackoverflow.com/a/16829276/1326147)。 – Armfoot 2015-09-22 17:06:24

0

Codeigniter会话类有让我们知道会话过期的方法。

function your_method(){ 

    $this->session->sess_read() === false ? echo "0" : echo "1"; 

} 
+0

'sess_read'将返回** TRUE **用户是否登录。如果用户未登录,则$ this-> session-> userdata('userid')'将返回** FALSE **,如果他是,则返回id。 – Armfoot 2015-09-22 17:03:37