cookie的基本流程如下:
- 设置cookie(可以用PHP,JS进行设置)
- cookie被自动添加到request header中
- 服务端接收到cookie,进行操作
什么是cookie?
cookie是浏览器自带的,存储到客户端,具体来说是一个纯文本文件,每个浏览器存储的位置都不一样。
cookie有什么用?
每次访问服务器的时候,浏览器都会查看是否有相应的cookie,有则自动添加在request header中的cookie字段中。
什么数据适合存储到cookie里?
可以重复使用的数据,如认证信息等。但是cookie是有限制的,最大为4KB,最多为20个。
cookie有哪些属性?
cookie有7大属性。分别为
name
:cookie名称.value
:cookie值。expire
:过期时间,是一个unix时间戳如果设置成零,或者忽略参数, Cookie 会在会话结束时过期(也就是关掉浏览器时)。
在HTTP1.1中新增了
max-age
选项,使用该选项而不用expire
max-age 的值是一个以秒为单位时间段(cookie失效时刻= 创建时刻+ max-age)。 max-age 的默认值是 -1(即有效期为 session ); 若max-age有三种可能值:负数、0、正数。 负数:有效期session;0:删除cookie;正数:有效期为创建时刻+ max-age
domain
:域名,默认值为设置该cookie的网页所在的域名path
:是路径,默认值为设置该cookie的网页所在的目录secure
:必须为安全的URL才会发送httpOnly
:Cookie 仅可通过 HTTP 协议访问,js无法操作。这种类型的cookie只能通过服务端来设置
如何设置cookie?
服务器端
如PHP,使用
setcookie()
函数设置,设置完成后,会通过 response 的 set-cookie选项保存到客户端以上七个属性都能进行设置
每个
set-cookie
选项会设置一个,想设置多个,使用多个set-cookie
。
客户端
- 如JS,使用
document.cookie="test=11";
进行设置
- 如JS,使用
如何修改和删除cookie
- 修改:
path/domain
值一致的情况下,直接赋值即可。 - 删除:
path/domain
值一致的情况下,将expire
字段设置为一个过去的时间即可。
cookie编码
cookie其实是个字符串,但这个字符串中逗号、分号、空格被当做了特殊符号。所以当cookie的 key 和 value 中含有这3个特殊字符时,需要对其进行额外编码,一般会用escape进行编码,读取时用unescape进行解码;当然也可以用encodeURIComponent/decodeURIComponent或者encodeURI/decodeURI(三者的区别可以参考这篇文章)。