【问题标题】:Redirection loop issue with PHP codePHP代码的重定向循环问题
【发布时间】:2014-03-24 03:13:53
【问题描述】:

我是这里论坛的新手,如果我忘记包含可能有用的信息,请道歉。

我已经成功地为我的测试网站构建了一个登录页面,并且一直在尝试实现重定向功能,如果用户的会话已经存在,它将重定向到主页。

这是我的代码:

<?php


if (empty($_SESSION['username'])) {
        header('Location: home');
        die();
}else{
        header('Location: index.php');
        die();
}
?>
<head>
<link rel="stylesheet" type="text/css" href="stylesheet.css">
<title>Login</title>
</head>

<body>
<!--HTML form stuff goes here-->

我使用的是 Chrome,但每次重新加载时总是收到“此网页有重定向循环”消息。我确信它与 else{} 语句有关,因为当它被排除并且会话确实存在时,它工作得非常好。

我们将不胜感激。

【问题讨论】:

  • as it works perfectly fine when it's excluded and when a session DOES exist. ... 但是您的代码中的session_start(); 在哪里??
  • @Shankar Damodaran 哎呀,忘了在我的原始代码中包含它。很遗憾,没有变化。
  • 我无法在这个级别回答我自己的问题,但我可以说我现在已经解决了这个问题。我删除了不必要的 else{} 语句,包括 session_start();并将“空”更改为“isset”。一切正常!感谢您的帮助。

标签: php google-chrome loops redirect


【解决方案1】:

该文件永远无法在浏览器中查看,因为它总是会重定向到homeindex.php。如果您粘贴的代码来自homeindex.php,则它是一个重定向循环。如果是这种情况,则没有理由重定向,因为您已经在该页面上。

【讨论】:

  • 澄清一下;是的,这段代码来自 index.php 页面。
  • 那么没有理由包含else 子句,这就是导致循环的原因。这是不必要的。
【解决方案2】:

理想情况下,您必须提供所有文件的数据

我假设您的所有文件都具有与您在上面为登录会话验证指定的代码段相同的代码段

然后我可以说这可能正在发生,您的登录页面重定向到 index.php,它再次执行相同的检查并再次重定向到自身,即 index.php 等等......并且您的浏览器卡在重定向循环中。

为了解决这个问题,你可以在 login.php 代码中检查这两种情况,如果用户登录或未登录并适当地重定向

login.php

if (empty($_SESSION['username'])) {
// not logged in redirect
        header('Location: home');
        die();
}else{
//logged in redirect
        header('Location: index.php');
        die();
}

并且在 index.php 中仅检查用户是否未登录,如果未登录则发送回 login.php 否则留在这里

index.php

if (empty($_SESSION['username'])) {
// not logged in redirect
        header('Location: login.php');
        die();
}else{
//logged in 
//do nothing
}

同样,您可以检查是否已经登录,在 home/index.php 文件中并进行适当的操作。虽然我建议的解决方案并不高效,但我希望它能让您了解您为何处于重定向循环中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多