公司有两个不同的网站分别使用了 Fingerprintjs 来获取用户指纹用于标记唯一的用户标识符,但它们获取的结果不一致。关于这个问题其他同事的经验初步推测是生成因子差异导致,参考 文档 排除了部分生成因子,但指纹 ID 结果依旧不同。
将所有的生成因子打印出来对比,发现这两个网站的结果总体一致,但总数不同。
const fp = await FingerprintJS.load();
const result = await fp.get();
for (const [key, value] of Object.entries(result.components)) {
console.log(`${key}:`, value);
}
这其实是 Fingerprintjs 的版本不一致所致,将依赖更新为同一版本后就正常了。分析完生成因子之后也能发现,其本身并没有依赖于某个网站下的数据,只是依靠检测各项浏览器 API 的可用性和设备参数(CPU 核心、内存、音视频设备名称等)来实现的。