gpt4 book ai didi

javascript - 为 cookie key 取一个随机指数值

转载 作者:行者123 更新时间:2023-11-30 16:12:15 25 4
gpt4 key购买 nike

用这样的代码能得到长度为17的字符串吗?我们将 cookie 保存在客户端的浏览器中,然后从该浏览器中获取它。

function getPartnerVisitorId() {
var pvid = cookies.get('pvid') || Math.floor(Math.random() * Math.pow(10, 15)).toString();
cookies.setOnRoot('pvid', pvid, 365 * 24 * 60 * 60);
return pvid;
};

我们认为“pvid”的最大长度应为 16 位数字,但有时(大约 5% 的 cookie)我们得到该 cookie 的 17 位长度。

我们还注意到所有奇怪的 cookie 都是偶数,其中大多数 (75%) 的最后一位数字为零

最佳答案

您要处理的问题必须符合 IEEE 754 float 的性质 - JavaScript 中用于保存 Number 的类型,Java 中用于保存 double 的类型,以及C等。这些数字以一种科学记数法的形式存储,形式为

[+/-] 1.[一些值] * 2^[一些其他值]

这导致您得到大约 15 个有效的小数位,这些数字特别擅长表达 2 的幂。

通过将 Math.random() 乘以 Math.pow(10,15),您会遇到此方案的两个问题:

  • 你的数字用完了,因此 chop 了底部的最后几位(因此你的数字总是偶数)
  • 您试图表示 10 的幂,但它并不总是准确(因此您有时会得到 17 位数字的 key )。

要解决这些问题并获得所需的恒定长度随 secret 钥,请执行两件事:

  • Math.random() 乘以 Math.pow(2,x)(其中 x 是您尝试寻找的数字正确的长度)- 2^任何东西都可以用 float 准确地表示。
  • toString() 方法中,插入一个整数参数,它是 2 的幂(例如 8 或 16)- 这将导致数字被转换为具有基数的字符串-8 或 base-16 数字系统。这将防止可变长度 key 并防止舍入。

var pvid = cookies.get('pvid') || Math.floor(Math.random() * Math.pow(8, 15)).toString(8);

关于javascript - 为 cookie key 取一个随机指数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36068526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com