2014-01-24 27 views
0

我是codeigniter的新手,因此當我設置日誌代碼時,我開始使用簡單的方式,並將其更新爲更復雜/更安全。據說,我在創建一個會話並添加名爲「login_status」的user_data變量設置爲「1」方面取得了巨大進展。用作未來頁面請求的參考。最終我決定繼續設置數據庫表ci_sessions並切換到該表,而不是僅使用cookie。當我這樣做時,突然間我的「login_status」變量不再被寫入。因此,我無法再訪問任何後續頁面並不斷被重定向回登錄屏幕。當sess_use_database爲FALSE時,Codeigniter會話只寫入userdata

簡而言之,當sess_use_database設置爲false時,完全相同的代碼完美工作。

我不知道爲什麼發生這種情況,但任何幫助將不勝感激!

登錄控制器:

class login extends CI_Controller 
{ 

function __construct() { 
    parent::__construct(); 
    $this->load->library('session'); 
    $this->load->helper('url'); 
    $this->load->helper('form'); 
} 

public function index($login = "") 
{ 
    $data = array(); 
    if ($login == "failed") 
     $data['loginFailed'] = true; 
    else 
     $data['loginFailed'] = false; 

    $this->load->view('templates/headerAdmin'); 
    $this->load->view('admin/loginform', $data); 
    $this->load->view('templates/footerAdmin'); 
} 

public function assessme() 
{ 
    $username = $_POST['username']; 
    $password = md5($_POST['password']); 


    //checkme works fine and returns true 
    if ($this->checkme($username, $password)) 
    { 
     $newdata = array('login_status' => '1'); 
     $this->session->set_userdata($newdata); 
     $this->mainpage(); 
    } 
    else {$this->index("failed");} 
} 

public function checkme($username = "", $password = "") 
{ 
    if ($username != "" && $password != "") 
    { 
     $this->load->model('admin/loginmodel'); 
     if ($this->loginmodel->validateCredentials($username, $password)) 
      return true; 
     else 
      return false; 
    } 
    else 
    { 
     return false; 
    } 
} 

public function mainpage() 
{ 
    redirect('admin/dashboard'); 
} 

,我重定向到後,我可以成功登錄該控制器:

class dashboard extends CI_Controller { 

function __construct() { 
    parent::__construct(); 
    $this->load->library('session'); 
    $this->load->helper('url'); 
} 

public function index() { 

    //Make sure user is logged in 
    $login_status = $this->session->userdata('login_status'); 

    //This is where I am redirected because the user_data is not being set 
    if(!isset($login_status) || $login_status != '1') { 
     redirect('admin/login'); 
    } 

    $this->load->view('templates/headerAdmin'); 
    $this->load->view('admin/dashboard/list'); 
    $this->load->view('templates/footerAdmin'); 

} 

} 

配置:

$config['sess_cookie_name']  = 'ci_session'; 
$config['sess_expiration']  = 7200; 
$config['sess_expire_on_close'] = TRUE; 
$config['sess_encrypt_cookie'] = FALSE; 
$config['sess_use_database'] = TRUE; 
$config['sess_table_name']  = 'ci_sessions'; 
$config['sess_match_ip']  = FALSE; 
$config['sess_match_useragent'] = TRUE; 
$config['sess_time_to_update'] = 300; 

編輯:設置'sess_match_useragent'爲FALSE似乎阻止了會話被毀壞。希望這將提供其他線索,以什麼我的問題的原因,但顯然這,本身並不是一個理想的解決方案

+0

只是檢查的OB vious ...你已經創建了數據庫表,並且有一個'user_data'字段,對吧?你有autoload.php文件的庫數組中的數據庫嗎? (考慮一下,你也可以在你的自動加載庫中加入'session' – Mat

+0

是的,它會將涉及會話的所有其他數據寫入數據庫就好了 – Reasoned

+0

@Reasoned ** echo $ this- > session-> all_userdata(); **正在返回?您是否嘗試在腳本中放入** $ this-> output-> enable_profiler(TRUE); ** – sbaaaang

回答