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

Posted

技术标签:

【中文标题】我需要从浏览器中获取所有 cookie【英文标题】:I need to get all the cookies from the browser 【发布时间】:2010-09-20 03:23:19 【问题描述】:

我需要使用 javascript 获取存储在浏览器中的所有 cookies。如何做呢?

【问题讨论】:

nayagi,很遗憾,如果我们确实回答了您的问题,您将拥有不亚于 MALWARE 的软件。 @Jon Limjap - 这并不完全正确。有一些合法的场景可以枚举网络浏览器中的所有 cookie 而不会成为恶意软件。 哇等一下。所有的饼干?从任何网站登录?那是恶意软件... 我有一种情况(企业防火墙后面的 Web 应用程序),这样做会很方便且非常合法。然而,问题的存在是因为我们有太多的内部域(主要是通过虚拟主机),所以有人可能会争辩说解决方案是使用单点登录。 如果你真的需要所有的cookies,你必须创建并安装一个浏览器扩展来做到这一点。用于登录的 Cookie 被认为是敏感的,浏览器会尽力保守这些秘密。 【参考方案1】:

您只能访问特定网站的 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;

所以你以后可能会写:

var myCookies = getCookies();
alert(myCookies.secret); // "do not tell you"

【讨论】:

这不会捕获分号 ("; ") 之后的空格,因此键在前面有一个空格...使用 /; ?/ 何时拆分以删除它们? 检查 this sn-p 以解析 document.cookies(来自 O'Reilly 的书)。 应该真正将 .trim() 添加到 pair[0] 以确保没有前导空格。【参考方案2】:
    您看不到其他网站的 cookie。 您看不到HttpOnly cookie。 您可以看到的所有 cookie 都在 document.cookie 属性中,该属性包含一个 分号 分隔的 name=value 对列表。

【讨论】:

【参考方案3】:

你不能。根据设计,出于安全目的,您只能访问您网站设置的 cookie。 *** 看不到 UserVoice 设置的 cookie,也看不到 Amazon 设置的 cookie。

【讨论】:

facebook 是怎么做到的...?我总是看到 facebook 显示与我从 google 浏览的内容相关的广告! 实际上,Facebook 在每个网站上都植入了自己的 cookie……使用它的“赞”按钮。我敢打赌 Google 在 +1 按钮甚至网站统计脚本上也会这样做。 谢谢...,让我大开眼界。我认为与他们相关的任何类型的应用程序都可以,包括使用社交媒体帐户应用程序登录。 @SoursopTree - 不是 AdChoices 吗? Facebook 使用 AdChoices,这是一项 Google 服务,可根据您通过 Google 的搜索显示内容。 *** 也使用 AdChoices。我可能对确切的细节有点偏离 - 但我猜这就是你所想的。 @KeepMove 我们将此术语称为cookie-syncing【参考方案4】:

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

【讨论】:

【参考方案5】:

现代方法。

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

console.log(c);

;)

【讨论】:

它似乎在每个键之前生成一个空格。示例:“cookie_name”而不是“cookie_name” 解决添加trim:return document.cookie.split(";").reduce((ac, cv, i) => Object.assign(ac, [cv.split('=' )[0].trim()]: cv.split('=')[1]), );【参考方案6】:

由于标题没有指定它必须是程序化的,我假设这是一个真正的调试/隐私管理问题,解决方案取决于浏览器,并且需要一个内置详细 cookie 管理收费和/或调试模块或插件/扩展。我将列出一个,并请其他人在他们详细了解的浏览器上写下来,并请提供准确的版本。

铬,铁构建(SRWare Iron 4.0.280)

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

【讨论】:

【参考方案7】:

将trim()添加到object的key中,并将其命名为str,这样就更清楚我们在这里处理的是string了。

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

【讨论】:

【参考方案8】:

如果你开发browser extensions你可以试试browser.cookies.getAll()

【讨论】:

【参考方案9】:

你问的是可能的;但这仅适用于特定浏览器。您必须开发一个浏览器扩展应用程序来实现这一点。您可以阅读有关 chrome api 的更多信息以更好地理解。 https://developer.chrome.com/extensions/cookies

【讨论】:

以上是关于我需要从浏览器中获取所有 cookie的主要内容,如果未能解决你的问题,请参考以下文章

服务器获取浏览器发送请求中的cookies,选取自己需要的cookie

如何使用 Go/WASM 获取所有标头和 cookie

如何从request中获取指定cookies

如何使用C#中的Selenium Webdriver使用Chrome浏览器的Cookie?

如何在 Tampermonkey 中获取 cookie? [复制]

如何在浏览器中使用黄瓜水豚获取cookie