cookie
2018-09-09 本文已影响0人
wur1
js获取/设置cookie
let cookies = {};
if (document.cookie != null) {
document.cookie.split(';').map((cookieStr) => {
let [key, value] = cookieStr.split('=');
cookies[key.trim()] = value;
});
}
export default {
get: (key) => (cookies[key] || ''),
set: (name, value) => {
var exp = new Date();
exp.setTime(exp.getTime() + 30*60*1000);
document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString()+";path=/"; // escape将?!等特殊字符进行编码
}
};
- 服务端和客户端都可以设置cookie,cookie是客户端的身份凭据
- cookie的大小不能超过4k,每个域名下的cookie最多20个(但很多浏览器厂商在具体实现时支持大于20个),存储cookie是浏览器提供的功能。cookie 其实是存储在浏览器中的纯文本,浏览器的安装目录下会专门有一个 cookie 文件夹来存放各个域下设置的cookie,发http请求时,浏览器会先检查是否有相应的cookie,有则自动添加在request header中的cookie字段中。
- domain和path共同决定了哪些url可以访问cookie,也就是哪些请求能够携带浏览器中的cookie。默认情况下相同的域名才能共享cookie。
- exprise没有设置的话默认有效期与session相同,即会话cookie,会话cookie在浏览器关闭的时候就没了。httpOnly设置后客户端就不能访问cookie了。
- 删除cookie,将exprise设置为过去的时间即可。
- cookie编码,cookie其实是个字符串,但这个字符串中逗号、分号、空格被当做了特殊符号。所以当cookie的 key 和 value 中含有这3个特殊字符时,需要对其进行额外编码,一般会用escape进行编码,也可以使用encodeURIComponent或encodeURI。
- 浏览器可以设置不接受 Cookie,也可以设置不向服务器发送 Cookie。window.navigator.cookieEnabled属性返回一个布尔值,表示浏览器是否打开 Cookie 功能