Ошибка: localhost перенаправлял вас слишком много раз. ERR_TOO_MANY_REDIRECTS - PullRequest
0 голосов
/ 07 мая 2020

Моя структура настроена как тип MVC, где основная библиотека перенаправляет URL-адрес. Это полезно сказать, если ссылка имеет вид: Some_class/some_method, она загрузит some_method из Some_class . Также я настроил все для прохождения через index. php с использованием .htaccess file.
Code in index. php

<?php
session_start();
require_once 'config.php';
if (!isset($_SESSION['username']) && empty($_GET['url'])) { ?>
    <a href="Users/login">Login</a><br>
    <a href="Users/register">Register</a>
<?php } ?>

Код в config. php

// Redirect to the homepage if not signed in
    if(!isset($_SESSION['user'])){
     header('location: http://localhost/index.php');
 }

Код в Пользователи Контроллер

public function login(){
    // Code to verify the entered credentials
    // If entered data is valid
    $_session['user'] = $_POST['user'];
}
public function log_out(){
    session_unset();
}

Если кто-то выходит из системы используя метод log_out из контроллера пользователей , метод выполняется. И если код был правильным, в идеале он должен перенаправить на index. php, потому что код в config. php говорит, что если $_SESSION['user'] не установлен, он должен перенаправить на index. php. Однако всякий раз, когда кто-то выходит из системы, я получаю сообщение об ошибке, упомянутой в заголовке. Какую ошибку я делаю?

Ответы [ 4 ]

1 голос
/ 07 мая 2020

Это происходит из-за перенаправления l oop. Вот что происходит.

  1. Пользователь выходит из системы, и сеанс не установлен
  2. Затем пользователь перенаправляется на index. php где вы вызываете «config. php»
  3. В config. php вы проверяете, не вошел ли пользователь в систему. Это не так, поэтому он говорит ему перенаправить на индекс. php (и вы снова возвращаетесь в точку 2, снова и снова go)

Измените вашу конфигурацию. php для перенаправления, если пользователь вошел в систему, например,

// Redirect to the dashboard signed in
if(isset($_SESSION['user'])){
 header('location: http://localhost/dashboard.php');
}
0 голосов
/ 07 мая 2020

Вы начинаете сеанс после загрузки config. php. В противном случае условие под оператором if всегда будет истинным и будет работать как бесконечное l oop. Сначала запустите сеанс, затем загрузите файл config. php. Если ваш файл index. php предназначен для людей, которые не вошли в систему, не включайте блок if, чтобы проверить, вошел ли пользователь в систему, при загрузке index. php. Потому что для гостевых пользователей это создаст такой же бесконечный l oop. Эта часть должна быть добавлена ​​на страницы только для зарегистрированных пользователей.

Надеюсь, что это поможет.

0 голосов
/ 07 мая 2020

Вы создали белый список URL-адресов, которые должны работать без необходимости входа пользователя в систему. Например, $whitelist = ['Users/login', 'Users/register', '/']; и проверить текущий URL-адрес в условии перенаправления

if(!isset($_SESSION['user']) && !in_array($current_url, $whitelist)){
     header('location: http://localhost/index.php');
}

И session_start() проблема из других ответов.

0 голосов
/ 07 мая 2020

У вас нет сеанса в вашей конфигурации. php ... так что сделайте это так ..

<?php
session_start();
require_once 'config.php';

, чтобы ваш сеанс тоже был в config. php. Или возьмите строку session_start () в config. php, это может быть лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...