2013-11-02 34 views
0

当我正在浏览Stackoverflow时,我观察到我曾经访问过的任何问题都以不同的颜色标记。然后我开始思考堆栈溢出如何检测到这一点。浏览器用来检测用户访问URL的算法

有人可以告诉我他们使用什么算法,不仅可以通过不同的网站使用stackoverflow吗?

可能是它们存储的问题数在我的饼干和解析cookie数据后,他们都能够说,我访问了这个问题。但是,如果我访问过很多问题,这种方法可能吗?

更新

正如每个人都有提到这是一个浏览器属性,所以问题是他们如何记住这么多的链接,他们使用存储哪种算法和数据结构。

+0

哪种颜色?

+3

这也发生在其他所有网站上(尽管有些人决定让“visited”颜色与“not visited”颜色相同,因此无法看到)。顺便说一句,你真的认为我们需要一个链接到Stackoverflow?我们在上面。马上。 – delnan

+0

css'a:visited'或许 –

回答

4

实际上,它是您的用户代理(例如浏览器),即记住访问过的链接。然后,一个网站可以使用CSS来使其符合他们的喜好。

用户代理通常显示与先前访问的链接不同的未访问链接。 CSS提供伪类':link'和':visited'来区分它们。


至于你的问题的更新。查看一下Chrome source代码就会产生一些散列表作为数据结构。

另外,如果您的用户代理是有兴趣,无论是链接被访问或没有,你只需要计算指纹(如city hash)的URL和缓存与指纹的指纹进行比较链接在页面上找到。

即使你将访问一个新的URL每10秒了整整一个月,并假设指纹会占用40个字节,你会消耗大约只有10兆字节的内存。

+0

他们怎么记得?你能给我一些提示吗?谢谢。 – Trying

+0

大概有事情做与cookies –

+0

而就在[Chrome的源]瞥了一眼(https://code.google.com/p/chromium/codesearch#chromium/src/components/visitedlink/browser/visitedlink_master.h&sq=package:铬&升= 391&RCL = 1383398702)。它似乎是一个哈希表,它偶尔会持续存在(取决于您的设置)。 – miku