Set-Cookie
。Set-Cookie
,会将cookie保存下来
// Cookie都是name=value的结构,name和value都为字符串
document.cookie="USERNAME=胡文浩"
document.cookie="COURSE=what is cookie"
http协议是无状态的,并且请求成功后连接会断开,他无法确定这一次请求的客户端,就是之前登录成功的那个客户端。理论上,每次请求都可以带上账号和密码就可以解决这个问题,但是太麻烦。
所以,一般客户端登录成功后,服务器会给客户端一个"出入证",客户端只需要一个卡包来保存一个或多个出入证,后续客户端的每次请求,都必须自动附带这个出入证。并且客户端能够正确的正确的出示"出入证",当"出入证"过期也能自动的从卡包中移除。
因为localstorage是html5之后出来的,而且localstorage需要手动触发,所以。能满足上述要求的只能使用cookie。
cookie就像是浏览器的专属卡包,管理各个网站的身份信息
每个cookie就相当于是属于某个网站的一个卡片,它记录了以下信息:
当浏览器向服务器发送请求时,它会找有无cookie,如果有,就把cookie自动附带到请求中发给服务器。
浏览器会将符合条件的cookie,自动放置到请求头中
例如:
Cookie:a=1;b=2;c==3
分号分隔
cookie包含着重要信息,特别是登录成功后返回的cookie,虽然存储在浏览器中,但是不能泄露cookie。
服务器响应
服务器可以通过设置响应头,来告诉浏览器应该如何设置cookie
响应头按照下面的格式设置
set Cookie:cookie1
set Cookie:cookie2
set Cookie:cookie3
每个cookie的格式如下
键=值;path=?;domain=?;expire=?;max-age=7?;secure;httponly
键和值必须设置,其他属性可选
path路径默认用当前请求的路径
domain域默认设置为当前的请求域
expire(字符串 格林威治时间)和max-age(max-age:1000表示当前时间+1000秒)设置过期时间 设置一个即可;默认会话结束后过期
secure 设置后下一次请求只能是https才能带上该cookie
httponly 只能传输,不能通过js获取,这对防止跨站脚本攻击很有效
举例:
客户端通过post请求服务器http://huwenhao.com,并在消息体重给予了账户和密码,服务器验证登录成功后,在响应头中加入了如下内容
set-cookie:token=12345;domain=huwenhao.com;path=/;max-age=3000;httponly
客户端接收后自动的创建下面的cookie放入cookie卡包
key:token
value:12345
domain:huwenhao.com
path:/
expire:2020-04-07 19:20:30
secure:false
httponly:true
于是,随着后续当前浏览器对服务器的请求,只要满足要求cookie就会覆盖到请求头上。
cookie:token=123456;其他cookie.... //用;隔开
客户端设置
document.cookie 获取所有cookie
document.cookie="键-值;path=?;domain=?;expire=?;max-age=?;secure" 设置cookie
1.cookie自动过期
2.没过期的情况下,让服务器响应一个相同域,相同域,相同key,时间过期的cookie
set-cookie:token=;domainhuwenhao.com;path=/;max-age=-1
【注意】:可能会存在不同的域,不同的路径,但key相同的cookie,所以无法凭借key确定是哪一个cookie