服务器通过响应头向浏览器设置cookie,cookie的那些事

cookie简介

cookie 是服务器保存在浏览器的一小段文本信息,浏览器每次向服务器发出请求,就会自动附上这段信息。

cookie详解

cookie的属性

一条cookie主要保存了五个方面的信息,分别是cookie的名字,cookie的值,到期时间,所属域名(默认是当前域名),生效路径(默认是当前网址)。

cookie的长度

所有 cookie 的累加长度限制为4KB。超过这个长度的 Cookie,将被忽略,不会被设置。

cookie的通信

浏览器每次请求时,在请求头中通过Cookie字段将cookie发送给服务器。

服务器在响应头中,通过Set-Cookie字段将cookie发给浏览器。如果服务器加上了HttpOnly属性,则这个 cookie 无法被 JavaScript 读取。

不同的是浏览器向服务器发送 cookie 的时候,是使用一行将所有 cookie 全部发送,而服务器告诉浏览器需要储存 cookie 的时候,则是分行指定。

cookie的获取

浏览器通过document.cookie返回当前网页的 cookie(返回的是分号分隔的所有 cookie)。所以必须手动还原,才能取出每一个 cookie 的值。

cookie的设置

document.cookie属性是可写的,可以通过它为当前网站添加 cookie。但是,document.cookie一次只能写入一个 cookie,而且写入并不是覆盖,而是添加。

写入格式:value;expires=date;domain=domain;path=path;secure

value属性是必需的,它是一个键值对,用于指定cookie的值(对分号、逗号和空格进行转义)。

expires属性用于指定 cookie 过期时间。它的格式采用Date.toUTCString()的格式。

domain属性指定 cookie 所在的域名。如果未指定,默认为设定该Cookie的域名。所指定的域名必须是当前发送Cookie的域名的一部分。

path属性用来指定路径,必须是绝对路径。如果未指定,默认为请求该 Cookie 的网页路径。path属性生效的前提是domain属性匹配。

secure属性用来指定cookie只能在加密协议HTTPS下发送到服务器,只是一个开关,不需要指定值。

max-age属性用来指定cookie有效期,单位为秒。

HttpOnly属性用于设置该cookie不能被JavaScript读取。

以上可选属性可以同时设置一个或多个,也没有次序的要求。另外,这些可选属性只能用来设置 cookie。一旦设置完成,就没有办法读取这些可选属性的值。

如果想改变一个早先设置的Cookie,必须同时满足四个条件:cookie的key、domain、path和secure都匹配。

cookie的删除

删除一个cookie唯一方法是使其过期。

cookie封装

//设置cookie

function setCookie(key,value,expires,domain,path) {

var encodeKey = encodeURIComponent(key);

var encodeValue = encodeURIComponent(value);

var keyExpires = expires.toUTCString();

document.cookie = encodeKey + '=' + encodeValue + ';expires=' + keyExpires + ';domain=' + domain + ';path=' + path;

}

//获取cookie

function getCookie(key){

var encodeKey = encodeURIComponent(key);

var allCookie = document.cookie.split(';');

var cookie,len = allCookie.length;

for (var i = 0; i < len; i++) {

cookie = allCookie[i].split('=');

if (encodeKey == cookie[0]) {

return cookie[1];

}

}

return '';

}

//删除cookie

function delCookie(key,domain,path){

var encodeKey = encodeURIComponent(key);

var expires = new Date(0);

document.cookie = encodeKey + '=' + ';expires=' + expires.toUTCString() + ';domain=' + domain + ';path=' + path;

}

最后推荐一下自己的通用函数库

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值