利用FingerprintJS做浏览器指纹的实现方案
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
背景数据筛选可用指纹「平均变化周期」指标后端计算中间变量的计算规则fcc(指纹变化周期)const allRecord //查询得到的全部记录const fccCollector = {}for (let gi = 0; gi < allRecord.groupCount; gi++) {
const lastRecordMap = {} //这里存储了各指纹的「上一条记录」
const group = allRecord[gi] //当前分组
for (let ri = 0; ri < group.rowCount; ri++) {
const row = group[ri]; //当前记录(行)
for (let ci = 0; ci < row.columnCount; ci++) {
const col = row[ci]; //当前列
const fingerprintName = col.name;//指纹的名称
const fingerprintValue = col.value;//指纹的值
const lastRecord = lastRecordMap[fingerprintName];//取出「上一条记录」
if (lastRecord && lastRecord.value != fingerprintValue) {//此时认为指纹发生了变化
const fcc = col.createdAt - lastRecord.createdAt; //计算本次的变化周期
fccCollector[col.browserMark][fingerprintName] = fcc //将本次fcc存起来
lastRecordMap[fingerprintName] = { value: fingerprintValue, createdAt: row.createdAt };
}
else if (!lastRecord) {//此时认为是此类型指纹首次出现
lastRecordMap[fingerprintName] = { value: fingerprintValue, createdAt: row.createdAt };
}
}
}}123456789101112131415161718192021222324252627
fccCollector={
browserMark1:{
fonts:[123,4341,111], //单位s,每一个数组元素是一个变化周期
domBlockers:[4213],
...//依次是32个指纹
},
browserMark2:{
fonts:[123],
domBlockers:[123],
...
},
...//依次是全部的browserMark}
{
fonts:{
value:"cde2267cc4c61e7bd9ebb893e2da3193",
createdAt:1640835596
},
domBlockers:{
value:"fa2fc67cc4c61e7bd9ebb893e2da3512",
createdAt:1640835341
},
...
}afcc(指纹平均变化周期)://例如计算browserMark为cde2267cc4c61e7bd9ebb893e2da3193的设备的fonts指纹的平均变化周期function calculateAfcc() {
const browserMark = "cde2267cc4c61e7bd9ebb893e2da3193"
const fontsFcc = fccCollector[browserMark].fonts;
let sum = 0
if (fontsFcc.length > 0) {
for (let i = 0; i < fontsFcc.length; i++) {
sum += fontsFcc[i]
}
return Math.ceil(sum / fontsFcc.length)
}
return 0}最终结果的计算规则计算方法的描述前端展现「生成时间」指标后端计算中间变量的计算规则每台设备的某指纹的平均生成时间最终结果的计算规则计算方法的描述前端展现该文章在 2023/8/4 1:23:36 编辑过 |
关键字查询
相关文章
正在查询... |