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

时间:2020-03-08 08:47:59

标签: php codeigniter codeigniter-3

我想显示当前用户的名字。

视图中(dashboard.php)

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

我的数据库在“用户”表中有一个字段“名称”。用户名保存在这里。但我得到的输出只是“名称”

所以,我在下面添加了这个

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

输出为

名称数组([__ci_last_regenerate] => 1583656504 [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();

    }

3 个答案:

答案 0 :(得分:1)

按如下所示更改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();

答案 1 :(得分:1)

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

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

但是您尚未在任何地方分配用户名,因此要实现此目的,您可以在登录类中提供一些选择

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,默认情况下,该用户会为您提供各种选择。

答案 2 :(得分:0)

请尝试更改模型

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');


}
相关问题