2013-05-30 74 views
5

我在這裏看到很多關於我的話題的問題,但似乎我還沒有找到我的答案。我實際上在尋找的是當會話過期時,用戶將被自動重定向到一個說的頁面。自動過期會話並檢測會話是否在Codeigniter中過期

其實我不知道如何確定用戶的會話是否已經過期。這是迄今爲止我所擁有的。

謝謝。

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'); 
} 

回答

1

您可以存儲在會話對象和用戶數據重定向任何頁面,你可以檢查會話對象已經存在,如果不存在則可以自動顯示警告,會話過期

1

雖然不是100%可靠,但可以在用戶機器上設置一個cookie。我會建議提前約一個小時設定到期日。

如果您想知道每個頁面是否已經過期,您可以檢查cookie和會話是否存在。如果它...繼續。如果只保留cookie,那麼您知道會話已過期,您需要將它們重定向到您在問題中提到的頁面。如果兩者都不存在,則存在問題,並且用戶需要重新啓動一切。

當然,對於會話實例化的每個頁面,會話過期將重新啓動,因此您需要重置該cookie。這可能有點乏味,但這是我的建議。

+0

有沒有辦法讓我來做在控制器中? –

6

您可以通過使ajax調用來檢查用戶的會話,並將其包裝到setIntervaljquery'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(); 
} 

希望這是有道理的

+0

這是一項上帝的技術,但如果用戶關閉了JavaScript,該怎麼辦?我需要一個無JavaScript腳本的解決方案。 – Smith

+0

我知道這個話題已經很老了,但是會像其他人一樣受益,我用上面的答案做了小小的修改。如果你不想使用'js',你可以像這樣使用元數據,' />',這是我在其他網站上看到的。將其放在''標籤內。 'content =「900;'是以秒爲單位的時間,後面跟着'url = <?php echo base_url(」logout「);?>',其中包含註銷方法,在我的情況下是單獨的控制器。別人在未來,但上面的'.ajax'是我的。謝謝 – Markmeplease

+0

@Markmeplease'content =「900; url = <?php echo base_url(「logout」); '''900'號碼是幾毫秒還是幾秒? – Gagantous

0

當您啓動會話,存儲當前時間一個會話變量。您可以使用session_expire_checker函數來檢查當前時間和存儲時間,以確定會話是否已過期。您應該從構造函數調用函數,以便每個函數調用都會自動使用該函數。在該功能中,如果會話過期,您將重定向到另一個控制器。

您必須爲重定向的URL使用單獨的控制器,否則會出現無限重定向。

0

笨不「觸發事件」的時候,會話到期。所以要麼在每個控制器函數中編寫一些代碼來檢查用戶是否仍然登錄。或者您在頁腳中使用一些小的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>