Codeigniter не отображает текущий сеанс loggerd в имени пользователя - PullRequest
0 голосов
/ 08 марта 2020

Я хочу отобразить имя текущего пользователя.

В представлении (панель инструментов. php)

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

В моей базе данных есть поле "имя" в таблице 'users ». Имена пользователей сохраняются здесь. но вывод, который я получаю, это просто "имя"

Итак, я добавил следующее

<?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)

Где и в чем проблема?

Я зарегистрировал нового пользователя, значения сохранены правильно в базе данных, я могу войти тоже. но не может отобразить имя пользователя, вошедшего в систему.

Логин. 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 ]

1 голос
/ 09 марта 2020

В вашем подходе есть пара проблем: вы печатаете имя пользователя

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

, но вы нигде не назначали имя пользователя, поэтому для выполнения sh у вас есть несколько вариантов в вашем классе входа в систему

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 или другое шифрование по паролю. ie:

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

или более новый пользователь библиотека ion_auth , которая по умолчанию предоставляет вам различные варианты.

1 голос
/ 09 марта 2020

Измените 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();
0 голосов
/ 09 марта 2020

Пожалуйста, попробуйте внести изменения в модель

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


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...