11

我需要能够确定和识别 cookie 的来源。虽然许多 cookie 会在原始页面的 HTTP 响应中到达浏览器,但其他 cookie 是通过 javascript 或通过使用 http 加载到页面上的资产(例如跟踪像素或 AJAX 调用)添加到浏览器的。

确定/识别每个 cookie 来源的好方法是什么?

4

3 回答 3

2

发布这个,因为我也在努力解决这个问题,终于找到了解决方案。

据我所知,这仅在 Firefox 控制台中有效......

  1. 在刷新后(在设置任何 cookie 之前)您知道在页面上运行的第一行 javascript 上设置断点。
  2. 然后清除缓存和 cookie。
  3. 将以下代码片段粘贴到 Firefox 的控制台中。
  4. 删除断点并恢复脚本执行。

您应该会在控制台中看到正在创建的每个 cookie 的堆栈跟踪!

origDescriptor = Object.getOwnPropertyDescriptor(HTMLDocument.prototype, 'cookie'); // add cookie property to HTMLDocument constructor

Object.defineProperty(document, 'cookie', {
    get() {
        return origDescriptor.get.call(this);
    },

    set(value) {
        console.log("%c Cookie is :" + value, "background: #ffffff; color: #000000");
        console.trace();
        // debugger;
        return origDescriptor.set.call(this, value);
    },

    enumerable: true,
    configurable: true
});

我必须感谢他在另一个主题中发布的这段代码 - 谢谢!

于 2018-11-08T14:05:38.510 回答
0

在浏览器中打开开发控制台并保存对本机 document.cookie getter/setter 的引用。在此之后,使用您自己的函数覆盖 document.cookie getter/setter,您可以在其中包含一个 console.log('creating cookie: ' + value),然后在该函数中调用本机 getter/setter。有关代码示例,请参见以下链接:Cookie Monster

于 2015-07-22T04:03:21.387 回答
0

粘贴在 Chrome 控制台上的代码,基于: Breaking JavaScript execution always when cookie is set

function debugAccess(obj, prop, debugGet){
        var origValue = obj[prop];
        Object.defineProperty(obj, prop, {
            get: function () {
                if ( debugGet )
                    debugger;
                return origValue;
            },
            set: function(val) {
                debugger;
                return origValue = val;
            }
        });
    };
    debugAccess(document, 'cookie');
于 2021-12-22T14:59:52.733 回答