Javascript 我需要从浏览器中获取所有cookies

Javascript 我需要从浏览器中获取所有cookies,javascript,cookies,Javascript,Cookies,我需要使用JavaScript获取存储在浏览器中的所有cookie。怎样才能做到呢 要检索浏览器中打开的当前文档的所有cookie,请再次使用document.cookie属性。不能。根据设计,出于安全目的,您只能访问站点设置的cookies。StackOverflow无法查看UserVoice或Amazon设置的cookies 您无法查看其他站点的cookie 你看不到饼干 您可以看到的所有cookie都在属性中,该属性包含一个以分号分隔的name=value对列表 您只能访问特定站点的Coo

我需要使用JavaScript获取存储在浏览器中的所有cookie。怎样才能做到呢

要检索浏览器中打开的当前文档的所有cookie,请再次使用
document.cookie
属性。

不能。根据设计,出于安全目的,您只能访问站点设置的cookies。StackOverflow无法查看UserVoice或Amazon设置的cookies

  • 您无法查看其他站点的cookie
  • 你看不到饼干
  • 您可以看到的所有cookie都在属性中,该属性包含一个以分号分隔的
    name=value
    对列表

  • 您只能访问特定站点的Cookie。使用
    document.cookie
    您将获得一个用分号分隔的转义键=值对列表

    secret=do%20not%20tell%you;last_visit=1225445171794
    
    为了简化访问,您必须解析字符串并取消对所有条目的扫描:

    var getCookies = function(){
      var pairs = document.cookie.split(";");
      var cookies = {};
      for (var i=0; i<pairs.length; i++){
        var pair = pairs[i].split("=");
        cookies[(pair[0]+'').trim()] = unescape(pair.slice(1).join('='));
      }
      return cookies;
    }
    

    由于标题没有指定它必须是编程的,我将假定这是一个真正的调试/隐私管理问题,解决方案依赖于浏览器,需要一个内置详细cookie管理工具的浏览器和/或调试模块或插件/扩展。我将列出其中一个,并请其他人在他们知道的浏览器上写下详细信息,并请准确说明版本

    铬,铁制(SRWare Iron 4.0.280)

    扳手(工具)菜单:选项/引擎盖下/[显示cookies和网站权限] 对于相关域/站点,在搜索框中键入后缀(如.foo.tv)。警告:当您有一个节点(站点或cookie)时,单击高亮显示的“仅使用[Remove]终止特定子树”。使用[Remove All]仍将删除搜索选择的所有站点的Cookie,并浪费调试会话

    现代方法

    let c = document.cookie.split(";").reduce( (ac, cv, i) => Object.assign(ac, {[cv.split('=')[0]]: cv.split('=')[1]}), {});
    
    console.log(c);
    
    )()

    将trim()添加到key-in对象中,并将其命名为str,这样我们在这里处理字符串就更清楚了

    export const getAllCookies = () => document.cookie.split(';').reduce((ac, str) => Object.assign(ac, {[str.split('=')[0].trim()]: str.split('=')[1]}), {});
    

    如果你发展了,你可以尝试你所要求的是可能的;但这只适用于特定的浏览器。你必须开发一个浏览器扩展应用程序来实现这一点。您可以阅读更多关于ChromeAPI的信息,以便更好地理解

    纳亚吉,不幸的是,如果我们真的回答了你的问题,你会得到一个完全是恶意软件的软件。@Jon Limjap-那不是真的。有一些合法的场景可以枚举web浏览器中的所有Cookie,而不会成为恶意软件。哇,等一下。所有的饼干?从任何网站登录?这是恶意软件…我有一种情况(企业防火墙后面的web应用程序),这样做既方便又合法。但是,问题的存在是因为我们有太多的内部域(主要是通过虚拟主机),因此有人可能会认为解决方案是使用单点登录。如果您确实需要所有cookie,则必须创建并安装浏览器扩展才能做到这一点。用于登录的Cookie被认为是敏感的,浏览器会尽力保守这些秘密。这不会占用分号(“;”)后面的空格,因此键的前面有一个空格。。。使用/;?/当拆分以删除它们时?请检查代码段以进行分析
    文档.cookies
    (来自O'Reilly book)。确实应该在对[0]中添加.trim(),以确保没有前导空格。facebook是如何做到的。。。?我总是在facebook上看到与我从谷歌浏览的内容相关的广告!事实上,Facebook在每个网站上都有自己的cookie。。。使用其类似的按钮。我打赌谷歌在+1按钮上,甚至在站点统计脚本上也会这样做。谢谢你…,这让我大开眼界。我认为任何与他们相关的应用程序都可以,包括使用社交媒体帐户应用程序登录。@SoursopTree-这不是AdChoices吗?Facebook使用AdChoices,这是一项谷歌服务,通过谷歌搜索显示内容。Stackoverflow也使用AdChoices。我可能不太清楚确切的细节,但我想这正是你所想的。@KeepMove我们称之为术语,因为它似乎在每个键前生成一个空格。示例:“cookie_name”而不是“cookie_name”解决了添加trim:return document.cookie.split(;).reduce((ac,cv,i)=>Object.assign(ac,{[cv.split('='))[0].trim()]:cv.split('=')[1]}),{});
    export const getAllCookies = () => document.cookie.split(';').reduce((ac, str) => Object.assign(ac, {[str.split('=')[0].trim()]: str.split('=')[1]}), {});