如何生成_ga和_gid的第三个字段?

8
我正在调查 _gid 和 _ga。据我所知,它们的定义如下:
_ga:用于识别唯一用户,有效期为 2 年。
_gid:用于识别唯一用户,有效期为 24 小时。
例如:
_ga:GA1.3.292651669.1502954402 _gid:GA1.3.974792242.1509957189
_ga cookie 中的值是什么? 中,我了解到了 _ga 中每个字段的含义。_gid 也是如此。
但我不知道如何生成第三个字段,即随机生成的用户 ID(对于 _ga:292651669 和 _gid:974792242)。
我试图删除 _ga 和 _gid,结果得到了新的一对:_ga: GA1.3.2097663971.1509959880 和 _gid: GA1.3.1180999143.1509959880。它们的第三个字段已经改变。那么它们是如何生成的,Google 又是如何通过它们来识别用户的呢?假设今天我在浏览器上打开了一对 _gid 和 _ga,而明天我清除了所有的 cookie,ga 将会创建一个新的一对 (_gid, _ga);这意味着我今天的我和明天的我是不同的。
请帮忙解答。
谢谢 & 最好的问候,
Jame
1个回答

9

以下是从2017年9月21日发布的analytics.js代码中生成随机id的代码。它是基于当前时间、userAgentcookiereferrerwindow对象中的history.length的随机值。

var O = window;

// var M = document;
// Stack Overflow doesn't allow cookie access in sandbox, so lets fake it:
var M = [];
M.cookie = "cookieName=someValue";

var hd = function() {
    return Math.round(2147483647 * Math.random())
}

function La(a) {
    var b = 1, c;
    if (a)
        for (b = 0,
        c = a.length - 1; 0 <= c; c--) {
            var d = a.charCodeAt(c);
            b = (b << 6 & 268435455) + d + (d << 14);
            d = b & 266338304;
            b = 0 != d ? b ^ d >> 21 : b
        }
    return b
}

var ra = function() {
    for (var a = O.navigator.userAgent + (M.cookie ? M.cookie : "") + (M.referrer ? M.referrer : ""), b = a.length, c = O.history.length; 0 < c; )
        a += c-- ^ b++;
    return [hd() ^ La(a) & 2147483647, Math.round((new Date).getTime() / 1E3)].join(".")
}


document.getElementById('output').innerText = ra();
<h3>Output:</h3>
<pre id="output"></pre>


1
谢谢@Martin Meixger,我在analytic.js中找到了这段代码,花费了很长时间。但还是感谢您的回答,我认为没有人会帮助我。但我有一个关于全局唯一随机ID能力的小问题。他们如何确保他们的ID。仍然存在重复的小概率,对吧? - Jame H
@JameH 完整的客户端ID是第三个和第四个元素的组合;这是一个时间戳。这两者的组合非常不可能重复。这需要在同一时间生成相同的唯一ID。您应该使用最后两个元素来识别用户或进行报告。 - Muhammad Ali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接