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


105

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


5
nayagi,不幸的是,如果我们回答您的问题,您所拥有的软件将不仅仅是MALWARE。
乔恩·林贾普

18
@Jon Limjap-并非如此。在合理的情况下,可以枚举Web浏览器中的所有cookie,而不会成为恶意软件。
弗朗西·佩诺夫

哇,等等。所有的饼干?从任何网站登录的?那是恶意软件……
alexyorke 2011年

我遇到的情况(企业防火墙后的Web应用程序)很方便而且很合法。但是,存在此问题是因为我们拥有太多内部域(主要是通过虚拟主机),因此人们可能会认为解决方案是使用单一登录。
ClubbedAce 2014年

Answers:


83

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

5
这不会在分号(“;”)后面占用空格,因此键在前面有一个空格...使用/; ?/拆分时将其删除?
卡特·科尔

检查代码段以进行解析document.cookies(来自O'Reilly的书)。
Bentley4

应该真正在pair [0]中添加.trim(),以确保没有前导空格。
安德鲁·基林


27

你不能。从设计角度出发,出于安全目的,您只能访问由您的网站设置的cookie。StackOverflow无法看到UserVoice设置的cookie或Amazon设置的cookie。


5
Facebook是如何做到的...?我总是看到Facebook展示与我从Google浏览的内容相关的广告!
阿里

16
实际上,Facebook使用其“喜欢”按钮在每个站点上植入自己的cookie。我敢打赌Google在+1按钮甚至网站统计信息脚本上都这样做。
PhiLho 2015年

1
谢谢...,它打开了我的眼睛。我认为与他们相关的任何应用都可以使用,包括使用社交媒体帐户应用登录。
2015年

2
@SoursopTree-是AdChoices吗?Facebook使用AdChoices,这是一项Google服务,可根据您通过Google的搜索显示内容。Stackoverflow也使用AdChoices。我可能对确切的细节有些怀疑-但我想这就是您在考虑的内容。
里克2015年

1
@KeepMove我们称此术语为cookie同步
ericdemo07

12

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


4

现代方法。

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

console.log(c);

;)


2

由于标题未指定必须是程序性的,因此我认为这是一个真正的调试/隐私管理问题,并且解决方案取决于浏览器,并且要求浏览器内置详细的Cookie管理费用和/或调试模块,或者插件/扩展程序。我将列出其中一个,并请其他人在他们详细了解的浏览器上撰写文章,并精确说明版本。

铬铁铸件(SRWare Iron 4.0.280)

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


1

在object的键中添加了trim(),并将其命名为str,因此在这里我们要处理字符串更加清楚。

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.