Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以检测到访客';使用JavaScript或PHP浏览历史记录?_Php_Javascript - Fatal编程技术网

是否可以检测到访客';使用JavaScript或PHP浏览历史记录?

是否可以检测到访客';使用JavaScript或PHP浏览历史记录?,php,javascript,Php,Javascript,我想检查我的网站的访问者在来我的网站之前是否访问过另一个特定的网站 我知道如何使用JS和PHP来检查(通过参考信息)用户是否刚从该站点访问过我的站点,但我希望能够检测到他们之前是否访问过该站点(而不仅仅是在访问我的站点之前)。是否可以检测到此信息?不幸的是 您可以将CSS规则应用于具有PHP脚本背景图像的a:visited。您以前可以这样做(使用JavaScript和CSS psuedo类:visited),但是。当然可以!只需询问其他站点是否可以在其站点上弹出一个脚本,将所需信息传递给您的系统

我想检查我的网站的访问者在来我的网站之前是否访问过另一个特定的网站

我知道如何使用JS和PHP来检查(通过参考信息)用户是否刚从该站点访问过我的站点,但我希望能够检测到他们之前是否访问过该站点(而不仅仅是在访问我的站点之前)。是否可以检测到此信息?

不幸的是


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

您以前可以这样做(使用JavaScript和CSS psuedo类
:visited
),但是。

当然可以!只需询问其他站点是否可以在其站点上弹出一个脚本,将所需信息传递给您的系统;)

有一种黑客可以让你做到这一点,但你不可能对所有浏览器都这样做,因为他们可能会试图隐藏这些信息。此外,您将无法在服务器端确定这一点,而只能通过客户端确定。这样做的目的是操纵已访问链接的样式表,因为@SLaks在我键入时已经声明:)

比如说,如果你有兴趣了解一个网站用户是否访问过google.com。然后在你的页面中插入一个指向谷歌的链接,并为访问过的链接设置一个独特的样式,其效果是事先知道的。在以下情况下,访问的链接将用
012345
着色

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

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

a:参观了{
颜色:#012345;
}

然后检查插入页面的每个链接,并获取其颜色。如果上面的例子是
#012345
,那么用户已经访问了该链接。然而,你实际上无法访问他们的历史记录来了解他们访问了哪些网站。这更像是一个轮询过程。

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

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

例如:使用本地DNS缓存,我对域的初始查询平均需要1.6秒。(我假设是因为缓存非常冷,需要查找.com、.co.uk和.co.jp名称服务器。)热缓存查询平均0.006秒。我的DNS缓存是递归解析程序,因此它不使用ISP的缓存解析程序

如果不使用本地DNS缓存和cute路由器上的DNS缓存,我的初始查询平均为.910秒,热缓存查询平均为.514秒。我不知道节省的.4秒是来自路由器的DNS缓存还是ISP的缓存。但在Javascript中,即使是0.4秒也应该是可见的

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

当我使用ISP的DNS时,我猜有9个“热”域和9个“冷”域,热的平均查找时间是.226秒,冷的平均查找时间是.308秒。0.082秒的差异可能不足以在javascript中引起注意,与使用本地缓存或我可爱的DNS小路由器的已知热查找和已知冷查找之间的差异相比,它显然相形见绌


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

+1。虽然我相信Firefox的最新版本已经部分关闭了这个“功能”。很酷的把戏,谢谢。我并不想侵犯访问者的隐私,我只是出于严格的技术原因才这么做。+1,尽管Safari 5已经删除了
:visted
选择器来解决这个问题。我喜欢你提供可能性和问题的方式,而不是一个或另一个。干得好。lol,第一个链接的图表显示了运行速度慢的软件是多么有益——越慢越好:)从这个角度来看,IE是世界上最好的浏览器。这个答案中的第一个链接现在似乎断了。@AndersonGreen更新了答案:)我不知道这有多可靠。很多ISP都有自己的DNS缓存,很多用户都在使用吗?顺便说一句,我想你把我的名字搞错了。我不再叫埃里克了:P@alex唉,我不知道我是怎么搞砸的:)对不起*我想知道为什么我在去CSS黑客网站之前从来没有想到这一点。