Codeigniter 不以用户名显示当前会话记录

Codeigniter does not display current session loggerd in user's name

我想显示当前用户的名字

可见(dashboard.php)

<?php 
$username = $this->session->userdata('logged_in');
echo $username;
?>

我的数据库在 table 'users' 中有一个字段 "name"。用户名保存在这里。但我得到的输出只是 "name"

所以,我添加了以下内容

<?php 
$username = $this->session->userdata('logged_in');
echo $username;
print_r($this->session->all_userdata());
?>

输出是

name Array ( [__ci_last_regenerate] => 1583656504 [name] => name [] => [logged_in] => 1 )

哪里出了问题,出了什么问题?

我注册了新用户,值在数据库中正确保存,我也可以登录。 但无法显示已登录的用户名。

Login.php(控制器)

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Login extends CI_Controller {


function __construct() {
parent::__construct();

// Load url helper
        $this->load->helper('url');
        $this->load->library(['form_validation','session']);
        $this->load->database();

        //load the Login Model
        $this->load->model('UserLogin', 'login');
}

    public function index()
    {

        $logged_in = $this->session->userdata('logged_in');

        if($logged_in){


            //if yes redirect to welcome page
            redirect(base_url().'app/dashboard');
        }

     $data['title'] = 'Login';
        $this->load->view('app/login', $data);

    }

        public function doLogin() {
        //get the input fields from login form

        $name = $this->input->post('name');
        $email = $this->input->post('email');
        $password = sha1($this->input->post('password'));

        //send the email pass to query if the user is present or not
        $check_login = $this->login->checkLogin($email, $password);
        //if the result is query result is 1 then valid user
        if ($check_login) {

         // $this->session->set_userdata('logged_in', true);
         $this->session->set_userdata('logged_in', $check_login);


            redirect(base_url().'app/dashboard');
        } else {
            //if no then set the session 'logged_in' as false
            $this->session->set_userdata('logged_in', false);

            //and redirect to login page with flashdata invalid msg
            $this->session->set_flashdata('msg', 'Username / Password Invalid');
            redirect(base_url().'app/login');            
        }
    }

        public function logout() {
        //unset the logged_in session and redirect to login page
        $this->session->unset_userdata('logged_in');
        redirect(base_url().'app/login');
    }
}

checklogin() 代码

<?php
    class UserLogin extends CI_Model{
         public function checkLogin($email, $password) {

        $this->db->where('email', $email);
        $this->db->where('password', $password);
        $query = $this->db->get('users');
        return $query->num_rows();

    }

像下面这样更改 CheckLogin() 然后检查用户数据

public function checkLogin($email, $password) {
    $this->db->where('email', $email);
    $this->db->where('password', $password);
    $query = $this->db->get('users');
    if($query->num_rows() == '1'){
        $data = $query->row_array();
        $this->session->set_userdata(array('name'=>$data['name'],'loggedin'=>'1'));         
    }
    return $query->num_rows();

请尝试更改模型

class UserLogin extends CI_Model
{
     public function checkLogin($email, $password) {

    $this->db->where('email', $email);
    $this->db->where('password', $password);
    return $this->db->get('users');


}

你的方法有几个问题,你正在打印用户名

$username = $this->session->userdata('logged_in');
echo $username; 

但是您还没有在任何地方分配用户名,所以要完成这个,您有一些选择,在您的登录 class

class UserLogin extends CI_Model{
  public function checkLogin($email, $password) {
    $this->db->where('email', $email);
    $this->db->where('password', $password);
    $query = $this->db->get('users');
      if($query->num_rows())
      {
        $user = $query->row_array();
        print_r($user); die(); // remove die after testing
        return $user;
      }
  return false;
}

你无法回应:

$user = $this->session->userdata('logged_in');
echo $user['username'];

第二个问题是这样登录用户很不安全,可以对密码进行md5等加密。即:

$this->db->where('password', md5( $password));

或更好的用户 ion_auth library,默认情况下为您提供各种选项。