CodeIgnigter - 如何存储和访问用户登录会话

时间:2017-12-18 18:14:02

标签: php codeigniter

我有一个控制器,用于使用以下代码创建用户登录会话:

    public function account(){
    $data = array();
    if($this->session->userdata('isUserLoggedIn')){
        $data['user'] = $this->user->getRows(array('id'=>$this->session->userdata('userId')));

        //Create session
        $newdata = array(
            'username'  => $user['name'],
            'email'     => $user['email'],
        );
        $this->session->set_userdata($newdata);

        //load the view
        $this->load->view('templates/header', $data);
        $this->load->view('pages/home', $data);
        $this->load->view('templates/footer', $data);
        //redirect('pages/view/');
    }else{
        redirect('users/login');
    }
}

当我尝试从此控制器或任何其他控制器检查会话数据时,会出现问题,并且它始终返回false。不确定我做错了什么。如果我通过这个

  

$数据['用户']

以视图作为数据,我能够访问名称和电子邮件,但我无法在控制器上访问它

2 个答案:

答案 0 :(得分:1)

如果我理解正确,我相信你的问题就在这里。

$newdata = array(
    'username'  => $user['name'],
    'email'     => $user['email'],
);

变量$user尚未在控制器中设置,至少在您显示的代码中没有。我认为这就是你需要的东西

$newdata = array(
    'username'  => $data['user']['name'],
    'email'     => $data['user']['email'],
);

有关获取会话数据的建议,与您的问题无关。使用CI> = v3.0.0,您可以获得这样的会话数据项。

$this->session->isUserLoggedIn;

此方法背后的代码较小,您键入较少以获得$this->session->userdata('isUserLoggedIn')提供的相同返回值。

userdata()是一种遗留方法,仅用于向后兼容旧版应用程序。

答案 1 :(得分:0)

首先,您需要商店会话数据 `

$sedata = array(
        'user'  => 1,
        'username'     => $username,
        'userid'     => $dbrow->id,
        'mobile_phone'     => $dbrow->mobile_phone,
        'success'   => 'Successfully loggedin!',
        'logged_in' => TRUE
    );
$this->session->set_userdata($sedata);

**Now you get session data like :**

$this->session->userdata('user');
$this->session->userdata('userid');

`