之前对于保持登录态这个问题,一直比较疑惑,自己也没有实现过,看了这篇文章之后好像明白了什么,聊一聊cookie
所以看完以后自己为了熟记,有了这篇学习笔记。
cookie的工作过程
cookie是浏览器提供的功能,可以存储字符串,cookie以域名的方式区分的,每一个域名下最多可以有20个(实际不止),每个cookie大小有限。每次发送http请求时,浏览器会查看是否有相应的cookie,有的话就自动添加到request header中,如果是用户名的话,就能告诉服务器是哪个用户在发送请求,就可以返回对应用户的数据,就实现了保持登录态(个人没实践过,但是觉得逻辑上说得通)。
cookie的选项
属性间由分号和空格隔开
- expires
这个选项可以设置cookie的失效时间,expires必须是 GMT 格式的时间(可以通过 new Date().toGMTString()或者 new Date().toUTCString() 来获得)。默认的有效期是session,就是在浏览器关闭后就会消失;该值设为0可以删除cookie。 - domain和path
domain是域名,和path一起构成url,该url可以限制cookie可以被哪些url访问,就是在给哪些url发请求的时候该cookie会被添加到request header中。在该路径或者该路径的子路径下时,会被添加。若没设置,使用默认值。domain的默认值为设置该cookie的网页所在的域名,path默认值为设置该cookie的网页所在的目录。
以下说明引用原文:
特别说明1:
发生跨域xhr请求时,即使请求URL的域名和路径都满足 cookie 的 domain 和 path,默认情况下cookie也不会自动被添加到请求头部中。
特别说明2:
domain是可以设置为页面本身的域名(本域),或页面本身域名的父域,但不能是公共后缀 public suffix。举例说明下:如果页面域名为 www.baidu.com, domain可以设置为“www.baidu.com”,也可以设置为“baidu.com”,但不能设置为“.com”或“com”。
- secure
secure用来设置在安全情况下发送cookie到服务器,默认值为空,也就是不管在http还是https下都能发送成功。即便设置了该选项在客户端还是能够看到cookie,网页在https协议下才能设置该属性。 - HttpOnly
HttpOnly用来设置js是否可以访问cookie,默认是可以访问的(修改,插入,删除),在服务器端可以设置该类型的cookie。
cookie的设置和修改、插入、删除
document.cookie可以获取到没有设置HttpOnly选项的cookie。
修改的话,要保证url相同的情况下,直接覆盖修改就可了。
插入的话 document.cookie = "key=value; "。
删除,在保证url相同的情况下,修改失效时间。