我是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似乎可以防止会话被破坏。希望这将提供关于我的问题的原因的其他线索,但显然这本身并不是一个理想的解决方案