身份验证后页面重定向到上一页

时间:2013-01-16 12:31:40

标签: php

我在验证后尝试将用户重定向到上一页。它适用于以下代码。

文件login_page.php(用户输入登录凭据的页面)包含以下代码,用于存储 SOURCE URL 并将其传递到下一页。

<input type="hidden" name="url" value=<?php echo $_SERVER['HTTP_REFERER'] ; ?> />

文件do_authentication.php(进行身份验证的页面)的代码echo "<meta http-equiv='Refresh' content=0;url='$_POST[url]'>";会重定向到 SOURCE网址

在正常情况下,它可以正常工作,但在用户输入错误凭据的情况下,页面会重定向到login_page.php,并要求用户使用正确的凭据重试。那时,'url'值会更改为login_page.php

解决这个问题的正确/更好的逻辑是什么?

5 个答案:

答案 0 :(得分:0)

使用:

header("location: ".$_POST['url']); // Redirects to posted page
exit; // Prevents execution of other code after this

答案 1 :(得分:0)

登录时我总是使用会话来保留原始页面。如果不支持会话,则无效。然后我只是将用户发送到主页。

讨论此问题的Stack Overflow帖子是 Redirect to previous page after logging in using PHP

答案 2 :(得分:0)

login_page.php中,您可以检查是否已通过URL;如果是这样,请传递一个而不是HTTP_REFERER。

<?php if(isset($_POST['url']) ?>
    <input type="hidden" name="url" value=<?php echo $_POST['url'] ; ?> />
<?php else ?>
    <input type="hidden" name="url" value=<?php echo $_SERVER['HTTP_REFERER'] ; ?> />

或者以更简洁的方式

<?php $url= (isset($_POST['url'])) ? $_POST['url'] : $_SERVER['HTTP_REFERER']; ?>
<input type="hidden" name="url" value=<?php echo $url; ?> />

答案 3 :(得分:0)

您应该考虑使用会话变量来存储要重定向到的页面的值。 HTTP_REFERRER不是正确的选项。

答案 4 :(得分:0)

试试下面的内容:

<input type="hidden" name="url" value=<?php echo pathinfo(__FILE__,PATHINFO_FILENAME ).".".pathinfo(__FILE__,PATHINFO_EXTENSION); ?> />