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,默认情况下为您提供各种选项。
我想显示当前用户的名字
可见(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,默认情况下为您提供各种选项。