PHP:登录后将用户返回原始页面

Age*_*rum 4 php http-referer redirect login user-experience

在登录您的网站后,特别是在PHP中,是否应该将用户返回到原始页面,是否有"最佳实践"?例如,如果我在未登录时查看StackOverflow问题,如果我登录,您将如何确保我回到此问题?

根据我的研究,似乎有很多建议围绕$ _SERVER ['HTTP_REFERER']变量.基本上,您注意引用并将其存储在会话中,然后在完成后重定向回该页面.

这个问题是HTTP_REFERER充其量是不可靠的.

这是由用户代理设置的.并非所有用户代理都会设置此功能,有些用户可以将HTTP_REFERER修改为功能.简而言之,它无法真正被信任.
- [ http://php.net/manual/en/reserved.variables.server.php]

对引用者重定向到站点其他区域的任何编辑都将通过例行权限检查来处理.如果引用被消除,则可以将用户简单地重定向到站点的主页而不是它们来自的页面.这似乎是不必要的用户敌意,我希望有更好的方法来处理这个问题.

mau*_*ris 6

在登录页面上:

<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>
Run Code Online (Sandbox Code Playgroud)

在登录控制器中,您可以获取该$_POST['l']值,并查看此URL是否在您自己的网站上.如果不是,请重定向到默认页面,否则重定向到此URL.

如果用户已经登录,请确保在登录页面上将用户重定向回主页或其他内容.这样可以防止重定向回登录等情况.

$_SERVER['HTTP_REFERER']是一个浏览器的责任.它大部分时间都相当可靠.如果浏览器没有发送,或者你担心它,你可以使用session.

在每个页面上只需设置$_SESSION['lastvisitpage']为当前页面URL.登录后,您重定向到$_SESSION['lastvisitpage'].

由于$_SERVER['HTTP_REFERER']用户可以随时伪造,因此应始终通过正确转义它来处理任何其他用户提供的变量.

  • 你应该认为`$ _SERVER`被污染了.在将其直接插入HTML之前,至少应用`htmlspecialchars`. (3认同)
  • 完全没问题.但请注意SESSION方法,因为您永远不知道用户是否在他/她的浏览器中打开了您网站的多个标签.如果这个答案给它打勾,让其他人知道=) (2认同)