2017-02-14 57 views

回答

2

這可以與jQuery/JavaScript的/ Ajax和一個笨功能的組合來完成。

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; 
    } 
} 
+0

$ this-> session-> userdata('is_logged_in');來自?你還沒有設置它。 –

+0

我編輯了is_logged_in索引的更多細節。 – Rahi

+0

我把你的答案與第二個答案結合起來,它的工作原理!謝謝。 –

2

只需將last_visited時間戳存儲爲會話變量即可。下一次用戶訪問時,檢查當前時間戳與會話中當前時間戳的差異。如果超過5分鐘,請註銷用戶。

$this->load->library('session'); 
$this->session->set_userdata(array(
          'last_visited' => time() 
        )); 
+0

我必須檢查每個函數嗎? –

+0

你可能會這樣寫'class xxxx extends MY_Controller {}'..所以在MY_Controller.php中,在'MY_Controller'的__construct中指定這個登錄名。它會自動調用所有操作。 – kawadhiya21

+1

謝謝你,我把你的答案與上面的答案結合起來,它的作品! –

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分鐘檢查一次。

相關問題