Codeigniter 会话空代码点火器
首先,对不起我的英语:D 我尝试在Codeigniter上简单登录,但没有成功。我阅读了官方文档,并将脚本缩减到最低限度。每次重定向刷新页面或转到其他控制器时,我的会话都是空的。如果我只创建一个控制器,并进行简单的读写操作,那么在刷新或重定向之前,它将一直运行良好 这就是我想做的: 1) 第一个控制器是主控制器。使用登录表单加载视图。此表单有一个操作,用于方法验证表单,然后是用户名检查回调 2) 如果用户能够登录,我将设置我的userdata并重定向到restricted controller,这是我的受限区域 另外,我在自动加载中使用库会话,选项数据库处于活动状态。我也有自动加载的数据库库 主控制器Codeigniter 会话空代码点火器,codeigniter,session,codeigniter-form-helper,Codeigniter,Session,Codeigniter Form Helper,首先,对不起我的英语:D 我尝试在Codeigniter上简单登录,但没有成功。我阅读了官方文档,并将脚本缩减到最低限度。每次重定向刷新页面或转到其他控制器时,我的会话都是空的。如果我只创建一个控制器,并进行简单的读写操作,那么在刷新或重定向之前,它将一直运行良好 这就是我想做的: 1) 第一个控制器是主控制器。使用登录表单加载视图。此表单有一个操作,用于方法验证表单,然后是用户名检查回调 2) 如果用户能够登录,我将设置我的userdata并重定向到restricted controller,
class Main extends CI_Controller {
public function __construct(){
parent::__construct();
}
public function index()
{
$this->load->view('login_view');
}
public function validation_form()
{
$this->load->library('form_validation');
$this->form_validation->set_rules('email', 'Email', 'required|callback_username_check');
if ($this->form_validation->run() == FALSE){
echo 'validation_error';
}else{
redirect('/restricted');
}
}
public function username_check(){
$this->load->model('login_model');
$email=$this->input->post('email');
$login=$this->login_model->validate($email);
if ($login != FALSE){
return true;
}
return false;
}
}
登录模型
class Login_model extends CI_Model{
public function __construct(){
parent::__construct();
}
public function validate($email){
// Prep the query
$this->db->where('EmailDatore', $email);
// Run the query
$query = $this->db->get('Datore');
// Let's check if there are any results
if($query->num_rows() == 1)
{
// If there is a user, then create session data
$row = $query->row();
$data = array(
'email' => $row->EmailDatore,
'nome' => $row->Nome,
'cognome' => $row->Cognome,
'validated' => true
);
$this->session->set_userdata($data);
return true;
}
// If the previous process did not validate
// then return false.
return false;
}
}
受限控制器
类受限扩展CI_控制器{
public function __construct(){
parent::__construct();
$this->check_isvalidated();
}
public function index(){
// If the user is validated, then this function will run
echo 'Congratulations, you are logged in.';
}
private function check_isvalidated(){
if(! $this->session->userdata('validated')){
redirect('main');
}
}
}模型中的输入错误,不确定是否存在其他错误,但至少存在此错误,这意味着您永远无法完成成功代码
if($query->num_rows() == 1)
编辑-此处也有错误,您正在传递$数据,但发送$电子邮件。因此,模型得到的是一个空字符串
public function username_check(){
$this->load->model('login_model');
$email=$this->input->post('email');
$login=$this->login_model->validate($email);
if ($login != FALSE){
return true;
}
return false;
}
我认为回调函数也可以是这样
public function username_check($str){
$this->load->model('login_model');
$login=$this->login_model->validate($str);
if ($login != FALSE){
return true;
}
return false;
您的代码是到达模型还是未能通过回调?代码的哪些部分没有达到?放置vardump();或者死();检查。您在哪里调用控制器函数username\u check?$this->form\u validation->set\u rules('email','email','required | callback\u username\u check');我刚刚从主控制器的构造中删除了会话_start()。这是一个测试:我也纠正了它:-$login=$this->login\u model->validate($data);在$login=$this->login\u model->validate($email)-添加在$this->load->view('login_view')行中,您没有显示发送登录数据的视图。目前看起来您几乎完全跳过了验证,因为表单验证直接进入受限页面。从视图到登录,再到进入受限页面的位置,事件的顺序是什么?我尝试对表单validatio进行调试,一切顺利。如果我把我所有的用户数据打印在我设置好的同一部分。但是当我重定向到受限区域时,上面的sessionSee编辑中没有任何内容,您向模型发送一个空字符串时出现了另一个错误。这一部分一切顺利。模型为load,validate()返回true。这个“if($this->form\u validation->run()==FALSE)”是真的,我被重定向到了限制区,这很好。但在控制器受限中,会话为空,因此$this->check_isvalidated();将我重定向到登录