作者:小爝
链接:https://www.zhihu.com/question/51410927/answer/125735195
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
泻药,这个一般用作给用户标识唯一标记用,在广告领域作用比较大,恰巧我还是有点了解。
直接js获取是没戏了,没这个api,一般的做法都是收集用户信息然后做一个hash生成。
具体收集哪些用户指纹信息,帮你简单列举一下,整个ua的值,是否开启localstorage,屏幕分辨率,比如你本地安装的插件(ie非ie区别对待,插件属性不同),计算机硬件信息,是否支持一些新浏览器的特性,比如本地有安装indexdb,ie下还有个addBehavior可以搜索下用法,大概收集好这些信息之后,如果觉得还不放心,如果支持canvas的浏览器,你可以生成一个固定的canvas图形,但是由于终端不同,最后图形的细节还是有很大差别,参见:
Canvas Fingerprinting 里面的gif图,最后再转成字符。
因为这些信息都是经常不变的,所以完全可以当成是一个客户端指纹信息了。
然后把这些所有信息做一个hash运算,这里有一个库就是这个原理编写的,代码很少:
fingerprintjs/fingerprint.js at master · Valve/fingerprintjs · GitHub
专门生成用户指纹的js,他的hash算法你可以自己写,默认选择的是MurmurHash3算法,是redis实现hash的2种算法之一,特点是高性能行运算,低概率碰撞,也是常用的负载均衡算法。自己去google吧,Austin Appleby发明的很出名的一个算法,各种语言都有实现 。。
大概浏览器端生成uuid就是这么个做法了。