mengff

cookie有9个属性:

Name: cookie名
Value: cookie值
Domain: cookie的域。如果设成.test.com,那么子域名a.test.com和b.test.com,都可以使用.test.com的cookie
Path: cookie的路径,一般设置成/即可
Expires: cookie过期时间。不设置,则为Session会话期,关闭页面,cookie失效
HttpOnly: 设置为true,则js读取不到cookie
Secure: 标记为Secure的cookie,只能通过https请求发送
SameSite: 限制第三方cookie。有3个值:Strict/Lax/None。chrome51新增,chrome80+强制执行

  Strict: 仅允许发送同站点请求的的cookie
  Lax: 允许部分第三方请求携带cookie,即导航到目标网址的get请求。包括超链接<a href=\'...\' />,预加载<link rel="prerender" />和get表单<form method="GET" />三种形式发送cookie
  None: 任意发送cookie,设置为None,需要同时设置Secure,意味着网站必须采用https,若同时支持http和https,可以将http用307跳转到https

Priority:优先级,chrome的提案,定义了三种优先级,Low/Medium/High,当cookie数量超出时,低优先级的cookie会被优先清除

cookie读写脚本

function getCookie(key){
    let cookies = document.cookie ? document.cookie.split(\'; \') : [];
    let i=0;
    let l=cookies.length;
    for(;i<l;i++){
        let entry = cookies[i].split(\'=\');
        if(entry[0] == key){
            return entry[1];
        }
    }
    return null;
}

function setCookie(key,value,opts){
    if (typeof opts.expires === \'number\') {
        var days = opts.expires, 
            t = opts.expires = new Date();
        t.setMilliseconds(t.getMilliseconds() + days * 864e5);
    }

    return (document.cookie = [
        encode(key), \'=\', String(value),
        opts.expires ? \'; expires=\' + opts.expires.toUTCString() : \'\',
        opts.path    ? \'; path=\' + opts.path : \'\',
        opts.domain  ? \'; domain=\' + opts.domain : \'\',
        opts.secure  ? \'; secure\' : \'\'
    ].join(\'\'));
}

function removeCookie(key){
    setCookie(key,\'\',{expires:-1});
    return !getCookie(key);
}

function encode(key){
    return encodeURIComponent(key);
}

 

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-05-21
  • 2021-06-12
  • 2022-12-23
  • 2022-12-23
  • 2021-12-06
猜你喜欢
  • 2022-01-16
  • 2021-11-12
  • 2021-09-01
  • 2021-10-20
  • 2021-06-26
相关资源
相似解决方案