感谢您的时间。
我正在使用PHP开发应用程序。在某些情况下,我添加了逻辑,以便对于某些区域匹配,然后重定向到特定的URL。
if(//statement) {
redirect to specific URL(e.g. http://www.example.com/testing.php )
}
以上是我的基本逻辑。在这里,我想确定用户是否在浏览器上手动加载了此网址http://www.example.com/testing.php,或者是从网络服务器重定向然后加载。
我如何实现这一目标。
欢迎您的建议!!!。
-Pravin。
答案 0 :(得分:3)
作为协议的HTTP不包括区分 访问URL的方式或用户在浏览器中完成的内容。 URL请求是一个URL请求,无论用户是单击链接,刷新页面还是键入URL都无关紧要。
有指标可能会或可能不会发出某些行为的信号(例如Referer标题),但它们不可靠,它们不是为了这个目的,它们可能会引入奇怪的行为边缘情况,如果你依赖它们。
每当您尝试执行此类操作时请注意这一点 更好的是,您应该将应用程序架构为不依赖于此类RESTless行为。
答案 1 :(得分:1)
您可以查看$_SERVER['HTTP_REFERER']
(文档here)
但这并不能给你100%的保证,因为有些浏览器不会发送推荐人。
另一种方法是在重定向用户之前在$_SESSION
中设置某种“引用”值。
答案 2 :(得分:1)
这可以通过检查引荐来源($ _SERVER ['HTTP_REFERER'])来完成,但遗憾的是,由于您无法确保每个浏览器都在发送引荐来源,因此它并不可靠。
所以也许最好在重定向中添加一个额外的参数,然后可以检查testing.php是否存在该参数。
为防止人们手动设置此参数(或意外地通过复制/粘贴),您可以检查该参数的变量值,例如:时间戳。
也可以设置会话变量,但这意味着设置了会话cookie(有些客户不喜欢)。
编辑:因为有些人实际上默认禁用cookie,所以会话不是设置它的最佳位置。
答案 3 :(得分:0)
您可以向重定向网址添加特殊的GET参数:
http://www.example.com/testing.php?redirect=1
如果$_GET['redirect']
存在,那么它来自重定向,否则不是。然而,这可能是假的。
您还可以在重定向$_SESSION['redirect'] = 1
的页面上设置会话变量,然后检查您的testing.php是否存在该会话var,也不要忘记在testing.php上取消设置该会话变量。