【问题标题】:redirecting cycle based on user session基于用户会话的重定向周期
【发布时间】:2011-11-28 22:40:23
【问题描述】:

我在重定向到某个页面时遇到问题。似乎它正在多次重定向自己。我有

if(!isset($_SESSION)){
header("location:index.php");
exit();
}

在我的标题中。我的标题包含在我的索引页和其他任何地方。我知道,由于它在标题中,它将被重定向到 index.php 然后它会一遍又一遍地执行脚本,这给我带来了问题。

如何防止它在重定向后立即停止执行此操作?或者是否有其他方法可以检查用户是否已登录,如果没有,请转到 index.php?

谢谢!

【问题讨论】:

    标签: php session redirect header logout


    【解决方案1】:

    首先,您不应该检查 SESSION 数组本身是否完整设置。您应该只分配一两个索引并检查它们。这样,您将永远无法逃脱重定向,因为您甚至没有机会分配 SESSION..

    您需要分配类似$_SESSION['authorized'] = TRUE; 在成功登录时,然后,在每个页面上,检查此索引是否已设置,是否为 TRUE,并采取相应措施。 此外,您应该重定向到登录页面,或类似的东西......您应该提供实际登录用户的可能性!当然,除非您的登录表单不在索引页面中,但您没有指定该信息...

    if(isset($_SESSION['authorized']) AND ($_SESSION['authorized'] === TRUE)
    {
       //ok, user is logged. Redirect somewhere else? Do something specific?
    }
    else
    {
       header("Location:index.php"); // or redirect to login.php, for example
       exit();
    }
    

    另外,请记住在您希望使用会话的所有页面中首先调用session_start()

    【讨论】:

    • 我只是做了 $_SESSION 来节省时间,我确实使用了 true 或 false 之类的东西,但问题是它在一个永无止境的循环中被重定向。
    • 这是一个架构问题,检查应该以这种方式进行,但是您有一些页面可以“免费”进行检查,或者允许每个人都可以访问的登录页面(所以没有 Session检查这里!)
    【解决方案2】:

    您的if 语句只是存在逻辑缺陷。

    如果会话处理已经开始,$_SESSION 将存在。

    如果不存在,则不存在。

    但这与您/用户是否使用会话无关。

    所以if 语句是没有用的。请阅读PHP Manual to learn how sessions work in PHP

    【讨论】:

      【解决方案3】:

      我想通了,我知道我的标题中有一个 if 语句,所以当我尝试重定向到 index.php 时,我仍然有那个 if 语句并且没有会话,我要将自己重定向到一个永无止境的循环中。

      我所做的只是为 index.php 创建了一个新标头

      【讨论】:

        猜你喜欢
        • 2017-06-19
        • 1970-01-01
        • 2013-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-06
        相关资源
        最近更新 更多