作者:詹荣臣 | 来源:互联网 | 2023-09-24 14:09
特点:服务器端可以设置请求头来控制浏览器的cookie值写入操作只会修改其中提到的cookie。namevalue必须被编码。一个cookie最大为4KB,每个网站最多有20+个左
特点:
COOKIE 选项:
path=/
,默认为当前路径,使 COOKIE 仅在该路径下可见。
domain=site.com
,默认 COOKIE 仅在当前域下可见,如果显式设置了域,可以使 COOKIE 在子域下也可见。
expires
或 max-age
设置 COOKIE 过期时间,如果没有设置,则当浏览器关闭时 COOKIE 就失效了。
secure
使 COOKIE 仅在 HTTPS 下有效。
samesite
,如果请求来自外部网站,禁止浏览器发送 COOKIE,这有助于防止 XSRF 攻击。
httponly
, 只能服务器使用 Set-COOKIE
设置,这个选项禁止任何 Javascript 访问 COOKIE
一组方便操作COOKIE的函数。
getCOOKIE(name)
函数返回具有给定 name
的 COOKIE:
// 返回具有给定 name 的 COOKIE,
// 如果没找到,则返回 undefined
function getCOOKIE(name) {
let matches = document.COOKIE.match(new RegExp(
"(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, ‘\\$1‘) + "=([^;]*)"
));
return matches ? decodeURIComponent(matches[1]) : undefined;
}
setCOOKIE(name, value, options)
将 COOKIE name
设置为具有默认值 path=/
(可以修改以添加其他默认值)和给定值 value
:
function setCOOKIE(name, value, optiOns= {}) {
?
optiOns= {
path: ‘/‘,
// 如果需要,可以在这里添加其他默认值
...options
};
?
if (options.expires instanceof Date) {
options.expires = options.expires.toUTCString();
}
?
let updatedCOOKIE = encodeURIComponent(name) + "=" + encodeURIComponent(value);
?
for (let optionKey in options) {
updatedCOOKIE += "; " + optionKey;
let optiOnValue= options[optionKey];
if (optionValue !== true) {
updatedCOOKIE += "=" + optionValue;
}
}
?
document.COOKIE = updatedCOOKIE;
}
?
// 使用范例:
setCOOKIE(‘user‘, ‘John‘, {secure: true, ‘max-age‘: 3600});
deleteCOOKIE(name)
要删除一个 COOKIE,我们可以给它设置一个负的过期时间来调用它:
function deleteCOOKIE(name) {
setCOOKIE(name, "", {
‘max-age‘: -1
})
}
参考链接:
https://zh.Javascript.info/COOKIE