我在验证后尝试将用户重定向到上一页。它适用于以下代码。
文件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
。
解决这个问题的正确/更好的逻辑是什么?
答案 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); ?> />