我有一个记录用户访问的应用程序。这些访问都不是直接访问的,这些访问的100%是从另一个站点引用的。
我将$_SERVER['HTTP_REFERER']
传递给数据库。大约35%的记录主菜通过了参考,其余的都是空白。
这是否有原因?
答案 0 :(得分:16)
HTTP_REFERER
可能为空的原因有很多。
window.open
,window.location
甚至在锚点或target="_blank"
设置meta refresh
。file_get_contents
,fopen
和其他语言中的其他类似函数可能不会设置引用请求。可能发生这种情况的情况可能更多,如果我能想到任何合理的话,我会更新。
答案 1 :(得分:9)
如果用户直接访问您的网站,则没有推荐人。它们也可能已经设置好,因此他们的浏览器永远不会发送引荐来源。
根据this answer,浏览器不必须在进行元刷新时发送引荐来源。
答案 2 :(得分:2)
浏览器有时会在请求中包含referer
。但这并非强制要求(referer
是100%自愿的)。确实referer
存在各种隐私和安全问题(例如,如果HTTPS站点引用您的HTTP站点,则浏览器不应将引用站点包含为referer
)。所以不要依赖它。
答案 3 :(得分:1)
在Internet Explorer 4.0及更高版本中从一个文档链接到另一个文档时,当链接从HTTPS页面到非HTTPS页面时,将不会发送Referer标头。当链接从非HTTP(S)协议(例如file://)到另一个页面时,也不会发送Referer标头。有关详细信息,请转到此link
答案 4 :(得分:0)
答案 5 :(得分:0)
当你被发现为什么缺少它时很常见: - 有时你的推荐人是https而你是http,它会丢失。
否则: - 通过直接输入URL来访问用户。 - 用户已添加书签并来自书签。 - 有时用户保留浏览器的url默认值(类似书签) - 代理冲浪可能会删除引用者。 - 作为机器人(搜索引擎)访问网站