有没有办法借助Javascript列出与当前页面关联的所有cookie?也就是说,如果我不知道Cookie的名称,但想检索它们包含的所有信息。
Answers:
您可以列出当前域的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
httpOnly=true
。
aString += i + ' ' + decodeURIComponent(theCookies[i-1]) + "\n";
许多人已经提到可以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 };
}, {});
不,没有。您只能读取与当前域关联的信息。
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))
}
这是专门用于您所在的窗户的。试图保持窗户清洁简洁。
其中包含一些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;
}