Cookie的理解与使用
一、Cookie
Cookie 就是浏览器储存在用户电脑上的一小段文本文件。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。
二、创建Cookie
1、服务端创建
不管你是请求一个资源文件(如 html/js/css/图片),还是发送一个ajax请求,服务端都会返回response。而response header中有一项叫set-cookie,是服务端专门用来设置cookie的。
Web 服务器通过发送一个称为’Set-Cookie‘的 HTTP 消息头来创建一个 cookie,’Set-Cookie‘消息头是一个字符串,其格式如下(中括号中的部分是可选的):
Set-Cookie: value[; expires=date][; domain=domain][; path=path][; secure]
注意: 一个set-Cookie字段只能设置一个cookie,当你要想设置多个 cookie,需要添加同样多的set-Cookie字段。
cookie属性项如下:
2、客户端创建
js-cookie是一个简单的,轻量级的处理cookies的js API。
三、字段
- name:一个cookie的名称。 value:一个cookie的值。
- domain:可以访问到此cookie的域名。非顶级域名,如二级域名或者三级域名,设置的cookie的domain只能为顶级域名或者二级域名或者三级域名本身,不能设置其他二级域名的cookie,否则cookie无法生成。 顶级域名只能设置domain为顶级域名,不能设置为二级域名或者三级域名,否则cookie无法生成。 二级域名能读取设置了domain为顶级域名或者自身的cookie,不能读取其他二级域名domain的cookie,所以要想cookie在多个二级域名中共享,需要设置domain为顶级域名,这样就可以在所有二级域名里面或者到这个cookie的值了。 顶级域名只能获取到domain设置为顶级域名的cookie,其他domain设置为二级域名的无法获取。
- path:可以访问此cookie的页面路径。比如domain是abx.com,path是/test,那么只有/test路径下的页面可以读取此cookie。
- expires/Max-Age:此cookie的超时时间。若设置其值为一个时间,那么当到达此时间后,此cookie失效。不设置的话默认值是Session,意思是cookie会和Session一起失效。当浏览器关闭(不是浏览器标签页,是整个浏览器)后,此cookie失效。
- Size:此cookie的大小。
- http:cookie的httponly属性。若此属性为true,则只有在http请求头中会带有此cookie的信息,而不能通过document.cookie来访问此cookie。
- secure:设置是否只能通过https来传递此条cookie。
四、编码
Cookie的编码方式:encodeURI()。
中文与英文字符不同,中文属于Unicode字符,在内存中占4个字符,而英文属于ASCII字符,内存中只占2个字节。Cookie在服务器上运行,如果在Cookie中直接使用中文值则会出现乱码,所以当Cookie保存中文的时候需要对中文进行编码,而且从Cookie中取出对应内容的时候也要进行解码。