代码点火器会话管理-刷新登录页面而不是填充会话

时间:2018-11-27 23:24:53

标签: php codeigniter-3 codeigniter-session

我是Code Igniter的新手,我尝试着按照说明进行操作,因为我继承了其中内置的网站,当它从PHP 5.6迁移到7.2时,我不得不对其停止工作进行升级。我认为会话管理在版本2.0x和3.0.0(我已移至)之间发生了很大变化。我想使用文件存储会话并配置了sess_path,但是当我的用户尝试登录页面时,只需刷新-这表明控制器中的if($ this-> form_validation-> run()== FALSE):语句下面的代码始终是正确的,这很奇怪,好像我没有填写用户名或密码并提交时,就运行了表单验证。

public function index(){

    $this->load->library('session');

    if ($this->session->userdata('user_is_admin')) {
        redirect('admin/login/welcome');
    }

    $this->load->library('form_validation');
    $this->form_validation->set_error_delimiters('<span class="form-error">', '</span>');
    $this->form_validation->set_rules('username', 'Username','required');
    $this->form_validation->set_rules('password', 'Password','required');

    if ($this->form_validation->run() == FALSE):


        $data['title'] = 'login';
        $data['content'] = 'admin/login/index-view';
        $this->load->view('template-admin-login',$data);

    else:

        $this->db->where('user_is_admin',1);
        $this->db->where('user_activated',1);
        $this->db->where('user_published',1);
        $this->db->where('user_email',$this->input->post('username'));
        $this->db->where('user_password', md5($this->input->post('password')));
        $query = $this->db->get('user')->row();

        if(!empty($query)):

            $newdata = array(
                               'user_id'  => $query->user_id,
                               'user_name'  => $query->user_name,
                               'user_is_admin'  => $query->user_is_admin
                           );

            $this->session->set_userdata($newdata);
            $this->session->set_flashdata('message_welcome', 'Hi '.ucfirst($this->session->userdata('user_name')).'!');
            redirect('admin/login/welcome');

        else:
            $this->session->set_flashdata('message_red', 'Username or password incorrect.');
            redirect('admin/login');
        endif;

    endif;

配置文件包含用于会话配置的以下内容:

$config['sess_driver']          = 'files';
$config['sess_cookie_name']     = 'ci_session';
$config['sess_expiration']      = 7200;
$config['sess_save_path']       = BASEPATH . 'application/cache/';
$config['sess_use_database']    = FALSE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_time_to_update']  = 300;

该表单非常简单-用户名和密码字段以及“提交”按钮,并将其发布到管理/登录页面。一直在通过Code Igniter说明进行会话管理,但是无法弄清为什么页面只是刷新。希望我不必从头开始重写整个内容。感谢您的任何帮助!

1 个答案:

答案 0 :(得分:0)

我认为保存路径不是您想要的。 BASEPATH指向系统目录。这会将您指向/ application内的/ cache目录。

$config['sess_save_path'] = APPPATH . 'cache/';