重定向到登录页面ERROR localhost重定向了你太多次

时间:2018-04-02 10:02:28

标签: php html5

使用PHP 7.1,MySQL,HTML5目前使用localhost,如果用户未登录,我想从每个网页设置重定向,返回登录页面login.php。

所以我在我的所有PHP文件中添加了以下include header.php

<!--    header.php
        on all webpages, checks if user logged in, redirects to login.php if NOT
https://stackoverflow.com/questions/29202153/how-to-redirect-users-to-login-page-if-they-havent-logged-in
-->
<?php
  session_start();
  if(empty($_SESSION["username"])){ /* IF NO USERNAME REGISTERED TO THE SESSION VARIABLE */
    header("LOCATION:login.php"); /* REDIRECT USER TO LOGIN PAGE */
  }
?>

我现在收到错误

localhost redirected you too many times.

按照建议清除了我的所有cookie并重新启动了我的系统,并且我从大约40个php文件中删除了对header.php的调用,这仍然是个问题。

我应该说它一直工作100%,直到我编辑了我的第40个PHP文件来添加

<?php require('header.php'); ?>

然后错误在Chrome浏览器中显示如下。

This page isn’t working
localhost redirected you too many times.
Try clearing your cookies.
ERR_TOO_MANY_REDIRECTS

我可以将header.php添加到更少的文件中,即添加到更高级别的php文件。

  1. 如何修复错误,以便继续开发和
  2. 我对代码做了哪些更改以防止将来出现错误。
  3. 我假设系统现在处于无限循环中,需要清除

    我迫切需要一个快速的解决方案,所以我们将非常感谢任何帮助,在此期间我会继续寻找解决方案。

    非常感谢,科林

2 个答案:

答案 0 :(得分:1)

header('Location: login.php')之后的代码仍在执行除非您知道自己在做什么总是 exit()Location标题之后因为这样更安全。

此外,您可以更改要求以避免双重包含(这会导致此问题)

<?php require_once('header.php'); ?>

然而,这更像是一个补丁而不是代码逻辑修复。

更好的解决方案是执行以下操作:

#header.php

if(!defined('TO_LOGIN')){
  define('TO_LOGIN', true);
  header("Location: login.php");
  exit();
} else {
  trigger_error('Another request to "login.php". debug: <pre>' . print_r(debug_backtrace(), true) . '</pre>');
}

因为如果客户端没有启用cookie,这将永远不会导致代码循环。

答案 1 :(得分:0)

我已经解决了这个问题,我的文件header.php(用于检查用户是否登录并在未登录时调用login.php)正在调用login.php

header.php
 called login.php
     called header-loginregister.php
         called header.php

所以它创建了一个无限循环,我需要小心我在那里放置包含header.php调用以避免将来出现这个错误。

所以间接login.php通过header-loginregister.phpheader.php

调用自己

感谢所有关于如何改进我将实施的代码的评论。