当sess_use_database为FALSE时,Codeigniter Session仅写入userdata

时间:2014-01-24 17:14:47

标签: codeigniter session

我是codeigniter的新手,所以当我设置我的登录代码时,我开始简单并不断更新它以使其更加复杂/安全。有了这个说,我在创建会话和添加名为“login_status”的user_data变量设置为“1”方面取得了很大的进步。用作未来页面请求的参考。最终我决定继续设置数据库表ci_sessions并切换到它而不是仅使用cookie。当我这样做时,突然之间我的“login_status”变量不再被写入了。因此,我无法再访问任何后续页面,并继续被重定向回登录屏幕。

简而言之,当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 个答案:

没有答案