1

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

该文件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 URL的代码

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

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

4

5 回答 5

0

采用:

header("location: ".$_POST['url']); // Redirects to posted page
exit; // Prevents execution of other code after this
于 2013-01-16T12:34:39.483 回答
0

登录时,我一直使用会话来保留原始页面。如果会话不受支持,这将不起作用。然后我只是将用户发送到主页。

讨论此问题的 Stack Overflow 帖子是使用 PHP 登录后重定向到上一页

于 2013-01-16T12:36:01.330 回答
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; ?> />
于 2013-01-16T12:43:07.800 回答
0

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

于 2013-01-16T12:44:57.687 回答
0

试试下面:

<input type="hidden" name="url" value=<?php echo pathinfo(__FILE__,PATHINFO_FILENAME ).".".pathinfo(__FILE__,PATHINFO_EXTENSION); ?> />
于 2013-01-16T12:51:58.047 回答