[转] web前端js构造无法销毁的类UUID识别码,识别浏览器设备唯一性

用户行为统计在如今的前端生态中已是稀松寻常,如各种站长统计工具。识别用户访问客户端唯一性是必要的实现,对于web前端获取的设备信息,一般容易想到的是通过navigator.userAgent,但相同设备及浏览器ua就相同了,故ua的辨识度很低,那么web前端识别浏览器设备唯一性是否有其他好办法?

 

先来说说FingerPrint ,也就是我们常说的指纹识别,FingerprintJS框架可以去github看看介绍,web指纹识别技术通过提取设备的各种特征,据说能达到94%的匿名浏览器区分度。因为这不是本文重点,所以这里不再展开。那就是还有其他办法?没错,而且足够的简单,不过毕竟适合场景的才是最好的,未必更好但的确值得一试。

 

你可能早就听过一个被人诟病的h5 api:app cache,没错,接下来我们就用它来实现浏览器设备的唯一性识别。我们结合实例来看看,总共用到3个不到1k的小文件:

1.index.html 业务页面,通过iframe标签引入uuid.html页面

2.uuid.appcache app cache 所需的一个配置文件

3.uuid.html 被index.html中的iframe引入,维持uuid的被cache页面

 

整个过程是这样的:

1.服务器端生成一个唯一识别码,写在作为维持uuid的uuid.html中,并标注<html manifest="uuid.appcache">

2.用户访问index.html,引入uuid.html后,执行的js可以读取到uuid

3.尝试修改uuid.html中的uuid,在微信浏览器中访问N次,读取到的uuid都是第一次被缓存的uuid。

也就是说,通过给用户打上一个无法销毁的识别码,达到了识别浏览器设备唯一性的目的。

 

测试时可以用python -m SimpleHTTPServer 8080起一个简单的测试服务器,使用微信内置浏览器测试。撰写者曾测试过的大多数设备都可行,尤其是在微信内置浏览器中的表现:即使是关闭微信或是重启手机,uuid也不会清除。请小心使用,若必要时需修改uuid,除了修改访问的uri以外,还可以修改uuid.appcache中的任意内容或是修改uuid.html的命名。

 

以上就是本文的全部内容了,希望能对你现在正在考虑的业务起到一点点的帮助。按照惯例提供了代码附件,有需要可自行下载查看,最后感谢关注焦糖心得(JOTTOWN)。

posted @ 2018-03-05 12:06  {前端开发}  阅读(6209)  评论(3编辑  收藏  举报