【问题标题】:localhost redirected you too many times in Codeigniterlocalhost 在 Codeigniter 中将您重定向了太多次
【发布时间】:2020-08-26 05:58:31
【问题描述】:

我已经用谷歌搜索了这个,但没有得到任何适合我的场景的东西所以,我发布了我的问题。我正在使用 CodeIgniter MVC 框架进行管理员登录,我已经为我的所有管理员控制器编写了一个名为“Admin_Controller”的基本控制器,它们从“Admin_Controller”扩展而来我已经在“Admin_Controller”的基本控制器中编写了登录会话检查但它不能正常工作说“本地主机重定向你太多次。”

文件夹结构:

--controllers
   --admin/
     -- Banners.php
     -- Categories.php
     -------
     -------
     -- Login.php
 --models
   -- admin
      -- Mdl_banners.php
      -- Mdl_categories.php
      ------------
      --------------
 --views
   --admin
     -------
     -------

登录表单:admin/login/login_View.php

<form action="<?php echo base_url(); ?>admin/login/validate_user" method="post" name="login_form">
  <h1>Login</h1>
     <?php
        echo "<div class='error_msg'>";
        if (isset($error_message)) {
          echo $error_message;
        }
        echo validation_errors();
        echo "</div>";
     ?>
    <div>
     <input type="text" name="user_name" class="form-control" placeholder="UserName" required="" />
    </div>
    <div>
      <input type="password" name="user_password" class="form-control" placeholder="Password" required="" />
    </div>
    <div>
      <button class="btn btn-default submit" name="submit_login">Login</button>
    </div>
</form>

我的基本控制器:core/MY_Controller.php

class MY_Controller extends CI_Controller {
  function __construct()
  {
    parent::__construct();
    // modules::run('admin/login/isUserLoggedin');
  }
}
class Admin_Controller extends MY_Controller {
  public function __construct()
  {
    parent::__construct();
    $this->_title = 'My Site Name';
    // check if user is logged in
    if (! $this->session->userdata('logged_in')) {
      redirect('admin/login');
    }
  }
}

我的登录控制器:Controllers/admin/Login.php

class Login extends Admin_Controller {
  public function __construct(){
    parent::__construct();
    $this->load->model('admin/mdl_login');
  }

  public function index(){
    if ($this->session->userdata('logged_in'))
      redirect(base_url('admin/dashboard'));
    $data['title'] = $this->_title . ' - Admin Login';
    $this->load->view('admin/login/login_view');
  }

  public function validate_user(){
    $this->form_validation->set_rules('user_name', 'Username', 'trim|required|xss_clean');
    $this->form_validation->set_rules('user_password', 'Password', 'trim|required|xss_clean');

    if ($this->form_validation->run() == FALSE) {
      $this->load->view('login_view');
    } else {
      $data = array(
        'username' => $this->input->post('user_name'),
        'password' => md5($this->input->post('user_password'))
      );
      $result = $this->mdl_login->login($data);
      if ($result == TRUE) {
        $user_name = $this->input->post('user_name');
        $result = $this->mdl_login->read_user_information($user_name);
        if ($result != false) {
          $session_data = array(
            'user_id' => $result[0]->id,
            'user_name' => $result[0]->username,
            'email' => $result[0]->email,
          );
          // Add user data in session
          $this->session->set_userdata('logged_in', $session_data);
          redirect('admin/dashboard');
        }
      } else {
        $data = array(
          'error_message' => 'Invalid Username or Password'
        );
        $this->load->view('admin/login/login_view', $data);
      }
    }
  }
}

htaccess:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

我的问题是它显示为“localhost 将您重定向了太多次。” 我怀疑在 'admin' 文件夹中的 'Login' 控制器是否有任何问题控制器?有人指出我正确的方向吗?谢谢。

【问题讨论】:

  • 这是因为循环,请重新格式化您的代码,使其值得阅读和挖掘。您在哪里显示登录表单?表单将提交给validate_user
  • 我已经用登录表单更新了我的问题,请检查一次@Adi Prasetyo
  • 除了这个 q,你应该使用 PHP password-hashing API 而不是 md5。你能在重定向循环之前看到表单吗?
  • 不,我看不到登录表单,如果我访问http://localhost/site_name/admin/login,则会显示错误为localhost redirected you too many times.
  • 而不是重定向尝试加载视图

标签: php codeigniter authentication codeigniter-3


【解决方案1】:

redirect('admin/login') 将查找名为 Admin 的控制器和方法 login。您可以更改为“foo/bar”,其中 foo 是您想要的控制器,bar 是方法。

给定这个函数

public function bar() {
  echo "I am about to show the login form here";
}

您可以使用remaproute

要打破重定向循环,首先要了解概念(使用重映射或路由),然后您应该修改代码以执行上述功能。

【讨论】:

  • 但我的控制器中没有任何名为“Admin”的控制器,那么我在哪里可以编写该函数?
  • controller文件夹里面的admin文件夹的用法是什么?
  • 分离所有管理控制器,例如for categories, admin/categories.php,其中Categories.php 将有自己的index,add,update,delete 方法。这是正确的方式吗?它适用于所有其他管理页面,如categories,但不适用于login 页面。您可以通过在我编辑问题时查看“文件夹结构”来理解这一点。
  • 感谢您的回答和所有回复,我会尝试您的回答并更新您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-22
  • 2020-01-03
  • 1970-01-01
  • 2020-06-01
相关资源
最近更新 更多