【问题标题】:adding user id from database to session data in Codeigniter?将用户ID从数据库添加到Codeigniter中的会话数据?
【发布时间】:2015-10-27 10:44:24
【问题描述】:

我是 CodeIgniter 的新手,在将用户 ID(用户登录后)从数据库添加到会话数据时遇到问题,这是我的代码问题,之前可能会在 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=> 为空

【问题讨论】:

    标签: php codeigniter session


    【解决方案1】:

    这些变量都不能用于赋值:

    '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-&gt;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-&gt;row_array() 来返回格式化为arrayarray,其中key 是列名,值是列结果。

    现在,执行echo '&lt;pre&gt;', print_r($this-&gt;session-&gt;userdata('sessiondata'), true),'&lt;/pre&gt;'; 以获取包含该数组的对象的格式化列表。然后您可以相应地映射名称。

    旁注,我不会在会话中存储密码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多