0

好的,所以我有一个用于登录的重定向功能。继承人一些代码:

if ($sukces) {
    $_SESSION['id'] = $row['id'];

    if($_POST['location'] != '') {
        header('Refresh: 1;url='.$_POST['location'].'');
    echo message('You have logged in.<br>Press <a href="'.$_POST['location'].'">here</a> if you are not returned automatically.');
    return false;
    } else {
        header("Location: /home");
    }

} else {
    // login failed
    exit();
}

if($_POST['location'] != '') {
    header('Refresh: 1;url='.$_POST['location'].'');
} else {
    header("Location: /account");
}


<form action="?page=login" method="post">
<input type="hidden" name="location" value="<?=isset($_REQUEST['redirect']) ? htmlspecialchars($_REQUEST['redirect']) : ''?>">


E.g:
http://localhost/?page=login&redirect=%2Fforum%2F%3Faction%3Dpost%26boardid%3D1

问题是如果您输入错误的登录凭据,位置输入字段的值将变为空。但是,如果您输入错误然后输入正确,您将不会被重定向。这是为什么?如何保留重定向网址?

4

3 回答 3

0

第二次到达这个页面时,它本质上是一个完整的重新加载,PHP 再次进行整个表单处理。不过,这一次,在制作表单时,请求中没有“重定向”参数。但是,有一个“位置”参数,源自您的隐藏表单输入。我想说你有两个不错的选择:

  • 更改“位置”或“重定向”,以便您始终使用相同的参数名称
  • 让底部附近的 PHP 代码决定使用“位置”,或者如果不可用,则使用“重定向”。
于 2013-07-24T20:00:48.060 回答
0

我这样做了:

<form action="?page=login<?=isset($_GET['redirect']) ? '&redirect='.urlencode($_GET['redirect']) : ''?>" method="post">
于 2013-07-24T20:09:44.777 回答
0

您将“重定向”作为隐藏字段注入表单。这是一个好的开始。但是您将其名称更改为“位置”。将隐藏字段的名称设置为“重定向”,它将被正确地重新提交。我相信这是你的初衷。

于 2013-07-24T21:31:18.297 回答