使用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文件。
我假设系统现在处于无限循环中,需要清除
我迫切需要一个快速的解决方案,所以我们将非常感谢任何帮助,在此期间我会继续寻找解决方案。
非常感谢,科林
答案 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.php
和header.php
感谢所有关于如何改进我将实施的代码的评论。