简体   繁体   English

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

[英]Check login and redirect in Codeigniter not working?

I have a problem when use check_login function. 使用check_login函数时出现问题。
When I enter http://localhost/shopping/admin/login and put admin username and password, it does not redirect to home admin page . 当我输入http:// localhost / shopping / admin / login并输入admin用户名和密码时,它不会重定向到home admin page But when I try to http://localhost/shopping/admin . 但是当我尝试http:// localhost / shopping / admin时 It still redirect to login page . 它仍然重定向到登录页面

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

But when I remove 但是当我删除

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


    }
}

still i can not find where you are using session i mean for set session generally we used $this->session->set_userdata('user_login_data'); 仍然我找不到您在哪里使用会话,我的意思是设置会话通常我们使用$this->session->set_userdata('user_login_data'); i think it is missing in your code . 我认为您的代码中缺少它。

<?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);
    }
}

?>

for your help i also attached my demo code for user login i hope it will help you.. 为了您的帮助,我还附上了用于用户登录的演示代码,希望对您有所帮助。

Below statement 以下声明

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

will always return true because $login will always be false as you have not set its value in set_userdata and $controller will always return admin as controller because u are using segment 1 as index. 将始终返回true,因为$ login始终为false,因为您尚未在set_userdata中设置其值,而$ controller将始终返回admin作为控制器,因为u使用段1作为索引。 so you are redireting to login page. 所以您要重新登录页面。

*set session correcty and check only session value not controller value for checking whether user authenticated or not if session value login not set to true redirect to loign else redirect to home page *设置会话正确性,仅检查会话值而不是控制器值,以检查用户是否已通过身份验证,如果会话值登录名未设置为true重定向到loign否则重定向到主页

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM