2016-04-24 27 views
1

我使用时出现问题check_login函数。
当我输入http://localhost/shopping/admin/login并输入管理员用户名和密码时,它不会重定向到主页管理页面。但是当我尝试 http://localhost/shopping/admin。它仍然会重定向到登录页面检查登录并重定向Codeigniter不工作?

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


    } 
} 
+0

你在哪里设置不检查用户是否验证过 控制器值当用户点击登录按钮时会话? –

+0

@SoravGarg sr,我编辑! – hyphens2

+0

你在哪里编辑我无法找到你的改变 –

回答

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

?> 

您的帮助,我还附上我的演示代码,用户登录我希望它会帮助你..

+0

请按照这个脚本... –

1

下面的语句

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

将始终返回true,因为$登录将永远是false,因为你没有在set_userdata中设置它的值,并且$ controller将始终返回admin作为控制器,因为你使用段1作为索引。所以你正在重定向到登录页面。

*设置会话correcty和检查只​​有会话值,如果会话值登录未设置为true重定向到loign否则在此功能重定向到主页

+0

谢谢你的回复:)它的工作原理 – hyphens2