确定用户是否在浏览器上手动加载URL或在php中通过服务器生成URL

时间:2010-10-19 09:08:10

标签: php cakephp

感谢您的时间。

我正在使用PHP开发应用程序。在某些情况下,我添加了逻辑,以便对于某些区域匹配,然后重定向到特定的URL。

if(//statement) {
   redirect to specific URL(e.g. http://www.example.com/testing.php )
}

以上是我的基本逻辑。在这里,我想确定用户是否在浏览器上手动加载了此网址http://www.example.com/testing.php,或者是从网络服务器重定向然后加载。

我如何实现这一目标。

欢迎您的建议!!!。

-Pravin。

4 个答案:

答案 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上取消设置该会话变量。