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

标签 php redirect authentication user-experience http-referer

关于用户登录您的网站后应如何返回到他们的原始页面,是否有任何“最佳实践”,特别是在 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/

相关文章:

php - 通过 PHP 修复 MySQL 查询

ios - 当服务器返回 'Moved temporarily' 或 'Moved permanently' 时,如何使用 NSURLConnection 获取重定向 URL?

android - Google 登录 - 尝试访问用户信息时出现 401 错误 "Login Required"

javascript - ember简单例份验证验证回调问题

php - 如何在获取时从 get mysql 乘以值

php - 清理无法解析的 csv 文件的简单方法是什么

php - Php 中另一个数组中的数组

android - 当我的 wifi 在 Android 手机上连接时打开一些链接

javascript - 为什么 document.write() 在 Firefox 和 Chrome 中的行为不同?

authentication - WSO2 Idp 发起的 SSO