我是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似乎阻止了會話被毀壞。希望這將提供其他線索,以什麼我的問題的原因,但顯然這,本身並不是一個理想的解決方案
只是檢查的OB vious ...你已經創建了數據庫表,並且有一個'user_data'字段,對吧?你有autoload.php文件的庫數組中的數據庫嗎? (考慮一下,你也可以在你的自動加載庫中加入'session' – Mat
是的,它會將涉及會話的所有其他數據寫入數據庫就好了 – Reasoned
@Reasoned ** echo $ this- > session-> all_userdata(); **正在返回?您是否嘗試在腳本中放入** $ this-> output-> enable_profiler(TRUE); ** – sbaaaang