2013-02-26 60 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