关于用户登录您的网站后应如何返回到他们的原始页面,是否有任何“最佳实践”,特别是在 PHP 中?例如如果我在未登录的情况下查看 StackOverflow 问题,您如何确保我在登录后返回到该问题?
根据我的研究,似乎很多建议都围绕着 $_SERVER['HTTP_REFERER'] 变量。基本上,您记下引荐来源网址并将其存储在 session 中,然后在完成后重定向回该页面。
问题在于 HTTP_REFERER 充其量是不可靠的。
This is set by the user agent. Not all user agents will set this, and some provide the ability to modify HTTP_REFERER as a feature. In short, it cannot really be trusted.
— [http://php.net/manual/en/reserved.variables.server.php]
任何对 referer 的编辑以重定向到网站的其他区域都将通过例行权限检查来处理。如果 referer 被清除,将用户重定向到站点的主页而不是他们来自的页面可能是可以接受的。但这似乎是不必要的用户敌意,我希望有更好的方法来处理这个问题。
最佳答案
登录页面:
<form action="controller/LoginController" method="post">
<?php
if (isset($_SERVER['HTTP_REFERER'])) {
echo '<input type="hidden" name="l" value="'.htmlspecialchars($_SERVER['HTTP_REFERER']).'" />';
}
?>
<!-- the rest of the form -->
<input type="submit" />
</form>
在登录 Controller 中,您获取 $_POST['l']
值并查看此 URL 是否在您自己的网站上。如果不是,则重定向到您的默认页面,否则重定向到此 URL。
确保在您的登录页面上,如果用户已经登录,则将用户重定向回主页或其他内容。这将防止重定向回登录等情况。
$_SERVER['HTTP_REFERER']
是浏览器的责任。它在大多数时候也相当可靠。如果浏览器不发送,或者你不放心,可以用session代替。
在每个页面上只需将 $_SESSION['lastvisitpage']
设置为当前页面的 URL。然后在登录时重定向到 $_SESSION['lastvisitpage']
。
由于 $_SERVER['HTTP_REFERER']
可以在任何时候被用户伪造,因此应该始终通过正确转义来对待任何其他用户提供的变量。
关于PHP:登录后将用户返回到其原始页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1984573/