在 Codeigniter 中检查登录和重定向不起作用?

Posted

技术标签:

【中文标题】在 Codeigniter 中检查登录和重定向不起作用?【英文标题】:Check login and redirect in Codeigniter not working? 【发布时间】:2016-08-17 23:03:24 【问题描述】:

我在使用 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'));

我用我的管理员登录后,它重定向到主页成功。

为什么它不起作用?

 /*
  * 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;


    

【问题讨论】:

在这个函数中,当用户点击登录按钮时,您正在设置会话?? @SoravGarg sr,我编辑了! 你编辑的地方我找不到你的修改 @SoravGarg 我添加了我的控制器登录。 @SoravGarg 非常感谢,我修复了我的登录控制器。这是工作! 【参考方案1】:

我仍然找不到您在哪里使用会话我的意思是设置会话通常我们使用 $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);
    


?>

为了您的帮助,我还附上了用于用户登录的演示代码,希望对您有所帮助..

【讨论】:

【参考方案2】:

以下声明

if (!$login && $controller != 'login') 
            redirect(admin_url('login'));
  

将始终返回 true,因为 $login 将始终为 false,因为您尚未在 set_userdata 中设置其值,并且 $controller 将始终返回 admin 作为控制器,因为您使用段 1 作为索引。所以你正在重定向到登录页面。

*设置会话正确性并仅检查会话值而不是控制器值以检查用户是否经过身份验证 如果会话值登录未设置为 true,则重定向到登录,否则重定向到主页

【讨论】:

以上是关于在 Codeigniter 中检查登录和重定向不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

CodeIgniter 会话类在 Chrome 中不起作用

在codeigniter中登录时,重定向功能不起作用

项目一众筹网02_2_管理员登录(转发改成重定向到主页面退出登录(转发和重定向的区别强制session失效invalidate)新建jsp模板

请求转发和重定向的区别

请求转发和重定向的区别

请求转发和重定向的区别