在CodeIgniter 3.1.2中重定向后,会话数据丢失

时间:2016-12-18 16:34:52

标签: php codeigniter session

我有一个CodeIgniter应用程序仍在开发中,但我意识到当我在会话中登录并设置用户数据时,它会被设置但在重定向后会消失。因此,重定向后我无法访问会话数据。

这是我的登录脚本

public function login(){

    if(!empty($_SESSION['user_id'])){//Meaning you are logged in
        //We inform you
        $this->session->set_flashdata('msg', "<div class='alert alert-success'><span class=''></span> You are already logged in as <strong>".$this->session->user_name."</strong></div>");

        //And send you back to your dashboard
        return redirect('/account/dashboard');
    }

    if($this->input->post()){
    $this->load->library('form_validation');
    $this->form_validation->set_rules('email','Email','required|valid_email');
    $this->form_validation->set_rules('password','Password','required');

        if($this->form_validation->run() == TRUE){

            $creds=['email'=>$this->input->post('email'),'password'=>$this->input->post('password')];
            $this->load->model('user/user_model');

            $user=$this->user_model->login($creds);

            if(!$user){
                $data['error_msg']="Inavlid login details. Please retry";
            }else{

            $user->user_type=(!empty($user->user_type))?:'2';

                $userdata=['user_id'=>$user->id,'user_name'=>$user->name,'user_email'=>$user->email,'user_type'=>$user->user_type];

                $this->session->set_userdata($userdata);
                    $this->session->set_flashdata('msg', '<div class="alert alert-success"><span class="fa fa-check"></span> Logged in as '.$this->session->userdata('user_name').'</div>');

                return redirect('account/dashboard');
            }

        }
    }

    $data['title']="Login";
    $this->load->view('template/auth/header');
    $this->load->view('account/login',$data);
    $this->load->view('template/auth/footer');

}

这是我的config / congig.php文件

$config['base_url'] = 'http://localhost/tmpad/';

$config['allow_get_array'] = TRUE;
$config['enable_query_strings'] = FALSE;
$config['controller_trigger'] = 'c';
$config['function_trigger'] = 'm';
$config['directory_trigger'] = 'd';

$config['encryption_key'] = '4%^&*9799809-nkhdfioup';

$config['sess_driver'] = 'database';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

$config['cookie_prefix']    = '';
$config['cookie_domain']    = 'http://localhost/tmpad/';
$config['cookie_path']      = '/';
$config['cookie_secure']    = FALSE;
$config['cookie_httponly']  = FALSE; 

$config['csrf_protection'] = TRUE;
$config['csrf_token_name'] = 'csrf_test_name';
$config['csrf_cookie_name'] = 'csrf_cookie_name';
$config['csrf_expire'] = 7200;
$config['csrf_regenerate'] = TRUE;
$config['csrf_exclude_uris'] = array();

会话在config / autoload.php中自动加载

我将不胜感激任何指导或帮助。 谢谢

5 个答案:

答案 0 :(得分:13)

我不确定究竟是什么问题。最近我也遇到了这个......

之前我在运行php7.0的开发工作。

目前它只在我的生产服务器上运行nginx和php 5.6。我的开发服务器似乎无法工作,并继续在会话表中重新生成新行。我的开发服务器在hometead virtualbox开发环境中使用php7.1,通常用于Laravel项目。

我设法通过这一步来克服这个问题。

1)转到system / libraries / Session / Session.php

2)通过添加//来评论session_start()。我们想重新定位sessionn_start()。

3)前往315行,其中表示安全为王,并注释到第351行

enter image description here

4)然后转到主index.php(根index.php)

5)在顶部添加session_start()一次。

enter image description here

6)好的,再试一次。希望它有效。我的猜测是它不能使用php 7.1,并且需要在这个Session.php文件中进行一些更新。

我的CI版本是3.1.1

enter image description here

答案 1 :(得分:0)

您的代码看起来很好,如果您注释重定向行并创建另一个转储会话的操作(例如dumpsession),那么如果您登录并最终将浏览器指向BASEURL / controller / dumpsession,您能看到所有会话数据吗?

可能问题不在于重定向。

答案 2 :(得分:0)

不确定人们是否仍然面临着这个问题, 但是我的解决方案是检查对会话文件夹的权限:

application/cache/sessions

在我的案例中,制作所有者www-data可以解决问题:

sudo chown -R www-data:www-data ./application/cache/sessions/

答案 3 :(得分:0)

只需尝试自动加载会话库;)

答案 4 :(得分:0)

如果有人来到这里仍在寻找解决方案,请先更新您的Codeigniter库;将整个系统文件夹升级到更高版本,例如3.1.5(在撰写本文时)。