检查 Codeigniter 中的登录和重定向不起作用?
Check login and redirect in Codeigniter not working?
我在使用 check_login 函数时遇到问题。
当我输入 http://localhost/shopping/admin/login 并输入管理员用户名和密码时,它不会重定向到 主页管理页面 。但是当我尝试
http://localhost/shopping/admin。它仍然重定向到 登录页面。
/**
* MY_Controller constructor.
*/
class MY_Controller extends CI_Controller
{
public $data = array();
function __construct()
{
parent::__construct();
// $this->load->library('session');
$controller = $this->uri->segment(1);
switch ($controller) {
case 'admin': {
$this->load->helper('admin');
$this->_check_login();
break;
}
default: {
}
}
}
/*
* Check login admin
*/
function _check_login()
{
$controller = $this->uri->rsegment('1');
$controller = strtolower($controller);
$login = $this->session->userdata('login');
//redirect to login if not logged in.
if (!$login && $controller != 'login') {
redirect(admin_url('login'));
}
//redirect to home if login successful.
if ($login && $controller == 'login') {
redirect(admin_url('home'));
}
}
}
/*
* admin_helper
*/
function admin_url($url = '')
{
return base_url('admin/'.$url);
}
但是当我删除
//redirect to login if not logged in.
if (!$login && $controller != 'login') {
redirect(admin_url('login'));
}
After I login with my admin, it redirect to home page successful.
Why is it not working?
/*
* Controller login
*/
class Login extends MY_Controller
{
function index()
{
$this->load->library('form_validation');
$this->load->helper('form');
if ($this->input->post()) {
$this->form_validation->set_rules('login', 'login', 'callback_check_login');
if ($this->form_validation->run()) {
$this->session->set_userdata('login', true);
redirect(admin_url('home'));
}
}
$this->load->view('admin/login/index');
}
/*
* Kiem tra login
* */
function check_login()
{
/*
$this->load->library('form_validation');
$this->load->helper('form');
*/
$username = $this->input->post('username');
$password = $this->input->post('password');
$password = md5($password);
$this->load->model('admin_model');
$where = array('username' => $username, 'password' => $password);
if ($this->admin_model->check_exists($where)) {
return TRUE;
}
$this->form_validation->set_message(__FUNCTION__, 'Login fail.');
return FALSE;
}
}
我仍然找不到你在哪里使用会话我的意思是我们通常使用设置会话$this->session->set_userdata('user_login_data');
我认为你的代码中缺少它。
<?php
class Welcome extends CI_Controller{
function __construct()
{
parent::__construct();
}
public function index()
{
$adminId = $this->session->userdata('unique_id');
if(empty($adminId)){
$this->load->view('login');
}else{
redirect('home/dashboard');
}
}
public function login()
{
$username = $this->input->post('username');
$password = base64_decode($this->input->post('password'));
$arr = array(
'username' => $username,
'password' => md5($password),
'user_type' => 'admin'
);
$result = $this->common_model->getMultiple('panel_login',$arr);
if(!empty($result )){
$this->session->set_userdata('unique_id',$result[0]['s_no']);
$this->session->set_userdata('username',$result[0]['username']);
$this->session->set_userdata('password',$result[0]['password']);
$this->session->set_userdata('type',$result[0]['user_type']);
$this->session->set_userdata('status',$result[0]['status']);
$this->session->set_userdata('user_activity',time());
}
echo json_encode($result);
}
}
?>
为了您的帮助,我还附上了用户登录的演示代码,希望对您有所帮助..
下面的语句
if (!$login && $controller != 'login') {
redirect(admin_url('login'));
}
将始终 return 为真,因为 $login 将始终为假,因为您尚未在 set_userdata 中设置其值,并且 $controller 将始终 return admin 作为控制器,因为您正在使用段 1 作为索引。所以你正在重定向到登录页面。
*设置会话正确性并仅检查会话值而不检查控制器值以检查用户是否已通过身份验证
如果会话值登录未设置为 true 重定向到登录,否则重定向到主页
我在使用 check_login 函数时遇到问题。
当我输入 http://localhost/shopping/admin/login 并输入管理员用户名和密码时,它不会重定向到 主页管理页面 。但是当我尝试
http://localhost/shopping/admin。它仍然重定向到 登录页面。
/**
* MY_Controller constructor.
*/
class MY_Controller extends CI_Controller
{
public $data = array();
function __construct()
{
parent::__construct();
// $this->load->library('session');
$controller = $this->uri->segment(1);
switch ($controller) {
case 'admin': {
$this->load->helper('admin');
$this->_check_login();
break;
}
default: {
}
}
}
/*
* Check login admin
*/
function _check_login()
{
$controller = $this->uri->rsegment('1');
$controller = strtolower($controller);
$login = $this->session->userdata('login');
//redirect to login if not logged in.
if (!$login && $controller != 'login') {
redirect(admin_url('login'));
}
//redirect to home if login successful.
if ($login && $controller == 'login') {
redirect(admin_url('home'));
}
}
}
/*
* admin_helper
*/
function admin_url($url = '')
{
return base_url('admin/'.$url);
}
但是当我删除
//redirect to login if not logged in.
if (!$login && $controller != 'login') {
redirect(admin_url('login'));
}
After I login with my admin, it redirect to home page successful.
Why is it not working?
/*
* Controller login
*/
class Login extends MY_Controller
{
function index()
{
$this->load->library('form_validation');
$this->load->helper('form');
if ($this->input->post()) {
$this->form_validation->set_rules('login', 'login', 'callback_check_login');
if ($this->form_validation->run()) {
$this->session->set_userdata('login', true);
redirect(admin_url('home'));
}
}
$this->load->view('admin/login/index');
}
/*
* Kiem tra login
* */
function check_login()
{
/*
$this->load->library('form_validation');
$this->load->helper('form');
*/
$username = $this->input->post('username');
$password = $this->input->post('password');
$password = md5($password);
$this->load->model('admin_model');
$where = array('username' => $username, 'password' => $password);
if ($this->admin_model->check_exists($where)) {
return TRUE;
}
$this->form_validation->set_message(__FUNCTION__, 'Login fail.');
return FALSE;
}
}
我仍然找不到你在哪里使用会话我的意思是我们通常使用设置会话$this->session->set_userdata('user_login_data');
我认为你的代码中缺少它。
<?php
class Welcome extends CI_Controller{
function __construct()
{
parent::__construct();
}
public function index()
{
$adminId = $this->session->userdata('unique_id');
if(empty($adminId)){
$this->load->view('login');
}else{
redirect('home/dashboard');
}
}
public function login()
{
$username = $this->input->post('username');
$password = base64_decode($this->input->post('password'));
$arr = array(
'username' => $username,
'password' => md5($password),
'user_type' => 'admin'
);
$result = $this->common_model->getMultiple('panel_login',$arr);
if(!empty($result )){
$this->session->set_userdata('unique_id',$result[0]['s_no']);
$this->session->set_userdata('username',$result[0]['username']);
$this->session->set_userdata('password',$result[0]['password']);
$this->session->set_userdata('type',$result[0]['user_type']);
$this->session->set_userdata('status',$result[0]['status']);
$this->session->set_userdata('user_activity',time());
}
echo json_encode($result);
}
}
?>
为了您的帮助,我还附上了用户登录的演示代码,希望对您有所帮助..
下面的语句
if (!$login && $controller != 'login') {
redirect(admin_url('login'));
}
将始终 return 为真,因为 $login 将始终为假,因为您尚未在 set_userdata 中设置其值,并且 $controller 将始终 return admin 作为控制器,因为您正在使用段 1 作为索引。所以你正在重定向到登录页面。
*设置会话正确性并仅检查会话值而不检查控制器值以检查用户是否已通过身份验证 如果会话值登录未设置为 true 重定向到登录,否则重定向到主页