117

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

4

9 回答 9

94

您只能访问特定站点的 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"
于 2008-10-31T09:28:31.487 回答
48
  1. 您看不到其他网站的 cookie。
  2. 你看不到HttpOnlycookies。
  3. 您可以看到的所有 cookie 都在该document.cookie属性中,该属性包含一个以分号分隔的name=value对列表。
于 2008-10-31T06:12:39.120 回答
34

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

于 2008-10-31T06:00:28.707 回答
13

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

于 2008-10-31T05:34:49.680 回答
4

现代方法。

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

console.log(c);

;)

于 2019-05-09T05:01:00.793 回答
3

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

铬,铁构建(SRWare Iron 4.0.280)

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

于 2013-02-28T07:15:26.430 回答
2

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

export const getAllCookies = () => document.cookie.split(';').reduce((ac, str) => Object.assign(ac, {[str.split('=')[0].trim()]: str.split('=')[1]}), {});
于 2019-05-10T06:25:21.037 回答
1

如果您开发浏览器扩展,您可以尝试browser.cookies.getAll()

于 2019-11-20T14:44:26.363 回答
0

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

于 2020-07-29T01:56:51.197 回答