设置 cookie 时总是中断 JavaScript 执行

Posted

技术标签:

【中文标题】设置 cookie 时总是中断 JavaScript 执行【英文标题】:Breaking JavaScript execution always when cookie is set 【发布时间】:2017-05-05 21:07:01 【问题描述】:

是否有可能在设置 cookie 时(不明确设置 JS 断点)始终在 FireBug 或其他 Web 开发工具中中断 javascript 执行?

document.cookie = '...';

【问题讨论】:

Proxying of document.cookie的可能重复 【参考方案1】:

The answer below 在 Chrome 中似乎不起作用。在 html → head 块的开头添加这个 sn-p 可以正常工作:

<script type="text/javascript">
    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');
</script>

更多信息请参见this Angular University page。

【讨论】:

在 Chrome 中运行良好。 1. index 中js的第一行添加断点。 2. 重新加载页面直到断点触发。 3. 在脚本标签之间粘贴上面的代码到控制台。 4. 单步执行新触发的 js 断点,在调试器中读取 Call Stack 和 Scope 以确定脚本来源和 cookie name/val。【参考方案2】:

这应该可以工作(在控制台中运行):

origDescriptor = Object.getOwnPropertyDescriptor(HTMLDocument.prototype, 'cookie');
Object.defineProperty(document, 'cookie', 
  get() 
    return origDescriptor.get.call(this);
  ,
  set(value) 
    debugger;
    return origDescriptor.set.call(this, value);
  ,
  enumerable: true,
  configurable: true
);

【讨论】:

像 FireBug 中的魅力一样工作。感谢您的帮助fflorent!【参考方案3】:

在 Chrome 开发工具中,您可以右键单击应用程序 cookie 中的一个 cookie,然后选择“使用此 cookie 显示请求”

所以这不是拦截,但如果您的目标是识别 cookie 的来源,那么这是一个好方法。

【讨论】:

虽然有用,但它显示了哪个请求具有特定的 cookie 标头,而不是哪个请求第一次设置了 cookie(我怀疑 OP 在之后)。每个第一方 cookie 都将包含在对您服务器的每个请求中,因此这可能对缩小范围没有太大帮助。【参考方案4】:

尝试在 If 语句中设置它。

if(document.cookie.indexOf('...') >= 0)
  debugger;

注意:使用 Firefox 时,您的控制台必须打开。在 chrome 中,情况并非如此。

【讨论】:

这不会在行 document.cookie = 上暂停执行。我试图找出在 JS 代码中设置某些 cookie 的位置。

以上是关于设置 cookie 时总是中断 JavaScript 执行的主要内容,如果未能解决你的问题,请参考以下文章

JAX-RS Cookie 响应未显示在浏览器中

cookie中maxAge总是-1和tomcat设置编码方式

向 Django-channels WebSocket 发送授权凭证(不将令牌设置为 cookie)

使用 selenium 添加 cookie 时,站点中断

为啥我用jquery 写 cookie总是undefined

Javascript 在浏览器关闭时删除 cookie,即使它设置为在启动时恢复 cookie