2015-12-04 37 views
0

我在codeigniter中創建了一個簡單的登錄,用戶輸入他/她的用戶名和密碼,如果有效,則轉到某個受保護的頁面。受保護的頁面有一個名爲logout的鏈接。但問題是註銷後,如果我直接訪問受保護的頁面,它不會重定向到登錄頁面。在codeigniter中沒有清除會話數據

我保護的頁面包含

<?php 
    if (!isset($this->session->userdata['loggedin'])) { 
     redirect("login"); 
    } 
?> 
Welcome Dear!! 
<a href="login/logout">Logout</a> 

我已經設置成功的用戶憑據後的會話數據。

//set the session variables 
$sessiondata = array(
    'username' => $username, 
    'loggedin' => TRUE 
); 
$this->session->set_userdata($sessiondata); 
redirect('admin'); 

在退出方式(登錄是我的控制器)我有沒有設置像這個 -

// Removing session data 
    $sess_array = array(
    'username' => '', 
    'loggedin' => FALSE 
    ); 
    $this->session->unset_userdata($sess_array); 

但是,當我直接進入管理頁面(保護)註銷後不重定向到會話數據登錄頁面。

註銷後,我在登錄頁面上調試它,它顯示已存儲的會話值。

echo $this->session->userdata['username']; 

但是當我在註銷方法上使用它工作正常。

$this->session->sess_destroy(); 

有誰能告訴我爲什麼會出現這種情況嗎? unset_userdata無法正常工作或我做錯了什麼?先謝謝了。

+0

檢查我的答案是否有效 –

回答

1

好吧,我解決了這個問題。問題是codeigniter在未設置會話數據時不接受數組對。即

我用我的應用程序 -

// Removing session data 
$sess_array = array(
'username' => '', 
'loggedin' => FALSE 
); 
$this->session->unset_userdata($sess_array); 

這個代碼,但笨現在不支持這一點。我用下面的代碼改變了這個代碼:

// Removing session data 
$sess_array = array('username','loggedin'); 
$this->session->unset_userdata($sess_array); 

現在它工作正常。

參考 - https://www.codeigniter.com/user_guide/libraries/sessions.html

**In previous versions, the unset_userdata() method used to accept an associative array of key => 'dummy value' pairs. This is no longer supported.** 
1

有問題的笨處理會話 功能:

$sess_array = $this->session->all_userdata(); 
    foreach ($sess_array as $key => $val) { 
     if ($key != 'session_id' && $key != 'last_activity' && $key != 'ip_address' && $key != 'user_agent') 
      $this->session->unset_userdata($key); 
    } 
+0

我看到了這個解決方案。我可以通過官方文件來修復它。但感謝您的代碼。 –

-1

上面的回答阿希斯·比斯瓦斯是好的,你也需要照顧,你應該檢查你的在你的控制器中登錄會話,就像在codeigniter中一樣,你正在訪問你的控制器功能而不是視圖。如果您要檢查並重定向瀏覽頁面,即使您沒有設置會話數據,該頁面也不會重定向到您的登錄控制器。