是否可以使用JavaScript或PHP检测访问者的浏览历史记录?

时间:2010-07-19 01:17:50

标签: php javascript

我想检查一下我的网站的访问者是否访问过另一个特定网站,然后才能访问我的网站。

我知道如何使用JS和PHP检查(通过引荐信息)用户是否刚从该网站来到我的网站,但我希望能够检测到他们是否随时访问过此网站之前(不只是在来到我的网站之前)。可以检测到这些信息吗?

5 个答案:

答案 0 :(得分:16)

不幸的是, this is possible this is possible

您可以将CSS规则应用于具有PHP脚本背景图像的a:visited

答案 1 :(得分:11)

您曾经能够(使用JavaScript和CSS伪类:visited),但browsers have fixed that exploit

答案 2 :(得分:4)

当然可以!只需询问另一个网站是否可以在他们的网站上弹出一个脚本,该脚本会向您的系统传递所需的信息;)

答案 3 :(得分:3)

有一个hack允许你这样做,但你无法确定性地为所有浏览器做这件事,因为他们可能会试图隐藏这些信息。此外,您将无法在服务器端确定,而只能通过客户端确定。我的想法是操纵@SLaks在我输入时已经声明的访问链接的样式表:)。

假设您有兴趣了解网站用户是否访问过google.com。然后在您的页面中插入谷歌链接,并为访问过的链接设置一个独特的样式,其效果事先已知。在下面的情况中,访问过的链接将使用#012345进行着色。

<style>
a:visited {
    color: #012345;
}
</style>

<a href="http://www.google.com"></a>
<a href="http://www.amazon.com"></a>

然后浏览已插入页面的每个链接,并获取它的颜色。如果上述示例为#012345,则用户已访问该链接。但是,您无法真正访问其历史记录以了解他们访问过哪些网站。这更像是一个投票过程。

答案 4 :(得分:1)

如果您不介意概率性答案,您可以计算在相关主机上进行DNS查找所需的时间。如果DNS答案很快回来,那么他们最近可能已经为该主机做了​​DNS请求。如果DNS回答速度较慢,那么他们最近可能没有为该主机做过DNS请求。当然,我的有线调制解调器将比CDMA或GSM手机提供更快的结果,因此它可能仅在您比较一台机器上的多个站点时才有用。

编辑,以回应Alex关于ISP DNS缓存的观点:

例如:使用本地DNS缓存,我对域的初始查询平均花费1.6秒。 (我假设因为缓存很冷,需要找到.com,.co.uk和.co.jp名称服务器。)热缓存查询平均为0.006秒。我的DNS缓存是一个递归解析器,所以它不使用我的ISP的缓存解析器。

不使用我的本地DNS缓存并在我可爱的路由器上使用DNS缓存,我的初始查询平均为.910秒,热缓存查询平均为.514秒。我不知道保存的.4秒是否来自我的路由器的DNS缓存或我的ISP的缓存。但即使是.4秒也应该在Javascript中可见。

有足够的数据进行一些猜测:如果第一次和第二次尝试解析域名的时间相似,您可以假设缓存很热并且最近使用过地址。 (在ISP级别可能很热,但在任何情况下都是以概率方法销售。:)如果时间不同,您可以认为缓存很冷。

当使用我的ISP的DNS时,我猜测了9个“热门”域和9个“冷”域,并且热点的平均查找时间为.226秒,冷的平均查找时间为.308秒。 .082秒的差异可能不足以在javascript中注意到,与使用本地缓存或我可爱的DNS小路由器的已知热和已知冷查找之间的差异相比,它肯定相形见绌。

当然,“热”和“冷”与每个域的TTL相关。