добавление идентификатора пользователя из базы данных в данные сеанса в Codeigniter?

Я новичок в CodeIgniter и сталкиваюсь с проблемой при добавлении идентификатора пользователя (после входа пользователя) из базы данных в данные сеанса, здесь мой вопрос с кодом может быть задан ранее в SOF, после того, как я все свои усилия попрошу об этом

// Логин-модель

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Login_model extends CI_Model { function __construct() { // Call the Model constructor parent::__construct(); } //get the username & password from tbl_usrs public function get_user($usr, $pwd) { $sql = "select * from tbl_usrs where username = '" . $usr . "' and password = '" .$pwd . "' "; $query = $this->db->query($sql); return $query->num_rows(); } /* public function set_session($username) { $sql="SELECT * FROM tbl_usrs WHERE username='".$username."' LIMIT 1 "; $result=$this->db->query($sql); $row=$result->row(); $sess_data=array ( 'id'=>$row->id, 'username'=>$username, 'is_login'=>TRUE ); $this->session->set_userdata($sess_data); } //set_seesion function ends */ } ?> 

// контроллер входа в систему

 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); print_r( debug_backtrace() ); //ini_set('memory_limit', '-1'); //ini_set('max_execution_time', 3000); ini_set('display_errors',1); error_reporting(E_ALL); class LoginController extends CI_Controller { public function __construct() { parent::__construct(); $this->load->library('session'); $this->load->helper('form'); $this->load->helper('url'); $this->load->helper('html'); $this->load->database(); $this->load->library('form_validation'); } public function index() { //load the login model $this->load->model('login_model'); // $qry=$this->login_model->validate(); //get the posted values $username = $this->input->post("username"); $password = $this->input->post("password"); $user_id = $this->input->get("user_id"); //set validations $this->form_validation->set_rules("username", "username", "trim|required"); $this->form_validation->set_rules("password", "password", "trim|required"); if ($this->form_validation->run() == FALSE) { //validation fails redirect('Homecontroller/index'); //make new controller for loading a form again echo "Validation fails"; // even for no name and passwrd } else { //validation succeeds if ($this->input->post('submit') == "Login") { //check if username and password is correct $usr_result = $this->login_model->get_user($username, $password); if ($usr_result > 0) //active user record is present { //set the session variables $sessiondata = array( 'user_id' => $user_id, 'username' => $username, 'password'=>$password, 'is_login' => TRUE ); //$this->login_model->set_session($username); $this->session->set_userdata($sessiondata); print_r($this->session->all_userdata()); //to check redirect(base_url("Site/member_area")); return $username; } else { $this->session->set_flashdata('msg', '<div class="alert alert-danger text-center">Invalid username and password!</div>'); redirect('Homecontroller/index'); } } else { redirect('login/home3'); } } } }?> 

когда я пытаюсь распечатать данные сеанса, я получаю user_id => empty

Ни одна из этих переменных не будет доступна вам для назначения:

 'user_id' => $user_id, 'username' => $username, 'password'=>$password, 

Причина этого в том, что вы использовали:

 $usr_result = $this->login_model->get_user($username, $password); 

Однако это будет только результат числа возвращаемых строк:

 public function get_user($usr, $pwd) ... return $query->num_rows(); 

Итак, теперь $usr_result будет числом возвращенных строк, а не данными пользователя.

Итак, что вы должны сделать, вместо этого установите данные сеанса в этой функции входа выше return $query->num_rows(); и ниже $query= .

 public function get_user($usr, $pwd){ .... $query = $this->db->query($sql); $this->session->set_userdata('sessiondata', $query->row_array()); } 

Обратите внимание, что поскольку мы только извлекаем 1 пользователя из нашего запроса, мы также хотели бы получить только 1 строку назад. Кроме того, вы хотите сохранить ассоциативный массив, а не объект, поэтому мы используем $query->row_array() для возврата 1 row отформатированной как array где key – это имя столбца, а значение – результат столбцов ,

Теперь сделайте echo '<pre>', print_r($this->session->userdata('sessiondata'), true),'</pre>'; для получения форматированного списка этого объекта, который содержит массив. Затем вы можете сопоставить имена соответственно.

Sidenote, я бы не хранил пароль в сеансе.