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

Spe*_*osa 65 javascript cookies

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

Dix*_*onD 80

您可以列出当前域的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;
}
Run Code Online (Sandbox Code Playgroud)

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

  • 当cookie被设置为值```httpOnly = true```时,这也不起作用. (3认同)
  • 通过`aString + = i +''+ decodeURIComponent(theCookies [i-1])+"\n"生成更好的输出;` (2认同)

Spe*_*osa 11

var x = document.cookie; 
window.alert(x);
Run Code Online (Sandbox Code Playgroud)

这将显示当前站点可以访问的每个cookie.例如,如果你创建了两个cookie"username = Frankenstein"和"username = Dracula",这两行代码将显示"username = Frankenstein; username = Dracula".但是,不会显示有效期等信息.

  • 如果您使用“httpOnly”设置 cookie,则此方法不起作用,建议这样做,因为它有助于减少 XSS 攻击的负面后果。 (2认同)

Jay*_*wal 11

很多人已经提到,它document.cookie可以为您提供所有 cookie(除了 cookie http-only)。

我将添加一个片段以跟上时代的步伐。

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

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

语法略有不同:

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

编辑:有人正确地指出,如果您的 cookie 键或值中有一个,您将面临问题=。也许考虑使用转义序列来缓解这种情况?


小智 5

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

javascript:window.alert(document.cookie.split(';').join(';\r\n'));
Run Code Online (Sandbox Code Playgroud)