http笔记:cookie
由于http协议无状态,cookie被用来判断客户端状态
- 作用域:由文档路径确定,默认对应文档同目录或子目录的文档可见,可通过
path属性修改 - 有效期:默认为当前浏览器进程(而不是浏览器窗口或标签)相同,可通过
max-age属性修改 - 属性
- 名值对,名不区分大小写,值为字符串,http头中的名和值都是URL编码
- 域,domain,默认为设定cookie的域名
“`
domain=www.example.com //指定子域
domain=.exampe.com //不指定子域,对所有子域可见
- 路径,path,默认为设定对应文档所在目录,对该目录及其子目录可见- 失效时间,expires,GMT格式的时间- 有效时间,max-age,单位为秒- 安全标识,secure,非名值对形式,出现secure字段时则设定,设定secure时cookie只有在使用SSL链接时才能传输- 可见性,httpOnly,设置时浏览器端脚本将不能通过document.cookie访问cookie- 由服务器设定- 在某次响应头中加入
Set-Cookie: name=value;name2=value2;expires=Mon, 22-Jan-07 02:10:24 GMT;domain=.example;secure//服务器响应头中设定各种属性
- 之后客户端每次对该作用域的访问自动在请求头中加入```Cookie: name=value//请求时只发送名值对
- javascript API
- cookie作为Document对象的属性
document.cookie,值为字符串类型,由名值对(包括domain,path等属性及其值)构成,各名值对用分号隔开
“`
name=value;name2=value2;expires=Mon, 22-Jan-07 02:10:24 GMT;domain=.example;secure
- cookie作为Document对象的属性
- 读取:直接读取document.cookie的值时,根据当前作用域返回一个字符串,只包含名值对,不同名值对用分号和空格"; "隔开,不包含其他属性,值是被编码的;```javascript"name1=value1;name2=value2;name3=value3"//document.cookie的值//将cookie解析为对象function cookieParse(){var cookieObj = {};var cookieStr = document.cookie;if(cookieStr=""){return cookieObj;}else{var lisr = cookieStr.split("; ");for(var i = 0; i < list.length; i++){aCookie = list[i];vs = aCookie.split("=");name =decodeURIComponent(vs[0]);;value = decodeURIComponent(vs[1]);//对值进行解码cookieObj[name]=value;}}}
- 设置cookie:直接给document.cookie赋值
“`javascript
document.cookie = encodeURIComonent(name) + “=” + encodeURIComonent(value);//拼接前需要对名和值进行编码
- 名不存在,cookie中加入新的名值对- 名已存在且对应的域和路径都相同时,覆盖原来的值- 设置cookie属性:直接在给cookie赋值时拼接属性键值对```javascriptdocument.cookie = encodeURIComonent(name) + "=" + encodeURIComonent(value) + ";domain=www.example.com" + ";path=/";
- 性能问题
- 静态资源请求不需要状态,请求中的cookie无用,对此需要将静态文件等不需要cookie的请求放到额外的域名上。使用额外的域名还可以增加浏览器下载线程的数量

浙公网安备 33010602011771号