标头位置不起作用 - 但肯定会被忽略

Posted

技术标签:

【中文标题】标头位置不起作用 - 但肯定会被忽略【英文标题】:header location not working - but definitely being passed over 【发布时间】:2012-04-13 12:45:52 【问题描述】:

令人讨厌的是,我的登录检查脚本没有重定向到我告诉它的位置。 我知道它正确地命中了 if 语句,因为我输入了 echos 来检查它。 它公然跳到标题,因为在第一种情况下它会回显“-blanks”,因为它应该也应该“它甚至走到这一步吗?”

因此,在此基础上,我知道它击中了标题 - 它只是简单地忽略它,我终其一生都无法理解为什么。

我确定它很简单,我错过了一些非常明显但我看不到的东西。 有什么建议吗?

// makes sure they filled it in 
if($_POST['frmLogin-username'] == "" || $_POST['frmLogin-password'] == "")
    echo " - blanks";

    header('Location: ?page=landing&action=login&message=1');
    echo "Did it even get this far?";
    die;

else
    // checks it against the database
    $query = mysql_query("SELECT * FROM shops WHERE shopUsername = '".$_POST['frmLogin-username']."'");

    //Gives error if user dosen't exist
    $count = mysql_num_rows($query);

    if ($count == "0")
        echo " - no user";
        header('Location: ?page=landing&action=login&message=2');
        die;
    
    else

        while($row = mysql_fetch_array( $query ))

            //gives error if the password is wrong

            if ($_POST['frmLogin-password'] != $row['shopPassword'])
                echo " - wrong pass";
                header('Location: ?page=landing&action=login&message=3');
                die;
            

            else

                // if login is ok then we add a cookie

                $hour = time() + 3600;

                setcookie(shopusername, $_POST['frmLogin-username'], $hour);
                setcookie(shopid, $row['shopId'], $hour);

                //then redirect them to the shop panel
                header("Location: ?page=shop");
                die;
            
        
    

编辑:问题与我在 index.php 中加载所有页面的方式有关,方法是调用包含我现在正在调查的内容 我已将此流程页面移动到它自己的 php 文件中,现在可以正常工作了

【问题讨论】:

将文本内容发送到浏览器后,您将无法发送标头 - 任何回声或空格都会阻止页面重定向。 另外,根据 HTTP 规范,您必须提供 Location 的完整 URI,而不是相对路径。 (尽管这可能不是问题,因为任何现代浏览器都会容忍这种情况。) 回声通常不存在 - 它们是为测试而添加的 那么,嗯,你被重定向到哪里了?确切的wget -S http://example.org/yourscript.php 输出是什么?向我们证明标题在那里,以及哪些。否则: Headers already sent by PHP的可能重复 【参考方案1】:

首先:在使用 echo 输出任何内容后,您不能发送标头,就像 Sam 在他的评论中所说的那样。

其次,要发送重定向,Location: 后面的 URL 必须是绝对的,例如 http://localhost/page/to/redirect/to.php

编辑 Corbin 实际上在我的回答中击败了我大约 10 秒 ;-)

【讨论】:

我使用了绝对 URL,但通常不会有回声(添加它们是为了检查我的代码是否正确命中 IF 语句,只是没有在此处发布前删除)即使使用绝对 URL,它仍然是不工作【参考方案2】:

问题与我通过调用包含在 index.php 中加载所有页面的方式有关

【讨论】:

【参考方案3】:

您可以在 PHP 中使用 window.location,只需 echo

【讨论】:

以上是关于标头位置不起作用 - 但肯定会被忽略的主要内容,如果未能解决你的问题,请参考以下文章

为啥是我的标头(“位置:$_SERVER['HTTP_REFERER']”); PHP函数不起作用?

标头位置重定向在 Web 服务器上不起作用

尽管设置了标头,但 CORS 不起作用

标题位置在 3 次后不起作用

AngularJS和rails cors标头不起作用

子资源服务器提示标头不起作用