如何使用Javascript列出当前页面的所有cookie?


75

有没有办法借助Javascript列出与当前页面关联的所有cookie?也就是说,如果我不知道Cookie的名称,但想检索它们包含的所有信息。


请澄清“特定页面”是否表示“用户当前所在的页面”。对于当前页面的Cookie,DixonD的答案很明显。出于安全原因,所有其他域都是禁止进入的。
本·佐托

1
是。我说的是用户当前所在的页面。
Speldosa

1
好。我编辑了标题和问题以反映这一点。DixonD的答案在这里很合适。
Ben Zotto

请注意,您实际上可能想通过禁用它HttpOnly。这是因为它使XSS攻击的功能大大降低。
Flimm

Answers:


92

您可以列出当前域的Cookie:

function listCookies() {
    var theCookies = document.cookie.split(';');
    var aString = '';
    for (var i = 1 ; i <= theCookies.length; i++) {
        aString += i + ' ' + theCookies[i-1] + "\n";
    }
    return aString;
}

但是出于安全原因,您无法列出其他域的Cookie


1
我对这个问题的描述一定很笨拙。我想要做的是获取由同一目录中的任何html文档创建的所有cookie的列表。在html文档中,我仅添加了以下代码:var x = document.cookie; window.alert(x); ...我可以看到我创建的所有cookie。对不起,如果我表达不清楚。谢谢您的所有快速解答。我已经喜欢这个网站了:)
Speldosa 2010年

7
当cookie设置为值时,这也不起作用httpOnly=true
Risto Novik

2
aString += i + ' ' + decodeURIComponent(theCookies[i-1]) + "\n";
更好的

16
var x = document.cookie; 
window.alert(x);

这将显示当前站点可以访问的每个cookie。例如,如果您创建了两个cookie“ username = Frankenstein”和“ username = Dracula”,那么这两行代码将显示“ username = Frankenstein; username = Dracula”。但是,将不会显示诸如到期日期之类的信息。


1
如果您将cookie设置为httpOnly,则建议这样做不起作用,因为这有助于减少XSS攻击的负面影响。
Flimm

9

许多人已经提到可以document.cookie让您获得所有cookie(除外http-only)。

我只添加一个片段以跟上时代的发展。

document.cookie.split(';').reduce((cookies, cookie) => {
  const [ name, value ] = cookie.split('=').map(c => c.trim());
  cookies[name] = value;
  return cookies;
}, {});

该代码段将返回一个以cookie名称为键的对象,并以cookie值作为值。

语法略有不同:

document.cookie.split(';').reduce((cookies, cookie) => {
  const [ name, value ] = cookie.split('=').map(c => c.trim());
  return { ...cookies, [name]: value };
}, {});

2

为了快速查看任何特定页面上的cookie,我保留了一个收藏夹栏“ Cookies”快捷方式,其URL设置为:

javascript:window.alert(document.cookie.split(';').join(';\r\n'));

1

没有。

唯一的API浏览器为您提供处理Cookie的方法是通过键值对获取和设置它们。所有浏览器仅按域名处理cookie 。

通过访问访问当前域的所有cookie document.cookie


1
如果建议使用httpOnly设置cookie,则此方法将无效,因为它有助于减少XSS攻击的负面影响。
Flimm


0
function listCookies() {
    let cookies = document.cookie.split(';')
    cookies.map((cookie, n) => console.log(`${n}:`, decodeURIComponent(cookie)))
}

function findCookie(e) {
  let cookies = document.cookie.split(';')
  cookies.map((cookie, n) => cookie.includes(e) && console.log(decodeURIComponent(cookie), n))
}

这是专门用于您所在的窗户的。试图保持窗户清洁简洁。


0

其中包含一些Cookie,例如引荐来源网址=。结果,简单地拆分=会导致不规则的结果,并且此处的先前答案会随着时间的推移而分解(或立即取决于您的使用深度)。

这仅采用等号的第一个实例。它返回带有cookie的键值对的对象。

// Returns an object of key value pairs for this page's cookies
function getPageCookies(){

    // cookie is a string containing a semicolon-separated list, this split puts it into an array
    var cookieArr = document.cookie.split(";");

    // This object will hold all of the key value pairs
    var cookieObj = {};

    // Iterate the array of flat cookies to get their key value pair
    for(var i = 0; i < cookieArr.length; i++){

        // Remove the standardized whitespace
        var cookieSeg = cookieArr[i].trim();

        // Index of the split between key and value
        var firstEq = cookieSeg.indexOf("=");

        // Assignments
        var name = cookieSeg.substr(0,firstEq);
        var value = cookieSeg.substr(firstEq+1);
        cookieObj[name] = value;
   }
   return cookieObj;
}
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.