小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
前言
Session其实是一个抽象概念,用于跟踪会话,识别多次http请求来自同一个客户端,cookie只是通用性较好的一种使用方案,通常设置一个名为sessionID 的cookie,每次请求时携带该cookie,后台服务即可依赖此SessionID值识别客户端。
cookie时客户端保存用户信息的一种机制,保存在客户机硬盘上,可以由服务器响应报文Set-Cookie的首部字段信息或document.cookie来设置,并且每次通过HTTP请求头的Cookie字段发送到服务器。子域名可以获取父域名cookie。
本来同源政策时限制无法读取非同源网页的cookie的,端口不同的网址不是同源,但是浏览器没有遵守这条规定,实际上,同一个网域的不同端口,是可以互相读取cookie的 浏览器的同源政策规定,两个网址只要域名相同,就可以共享cookie,注意这里不要求协议相同,也就是说,example.com设置的cookie,可以被https://example.co…
面试题:localhost:3000与localhost:5000的cookie信息是否共享 若两者的cookie的domain和path都相同会共享,若有一个不同,则该cookie不会共享
cookie配置
- Domain/Path
限制cookie空间范围 Domain:指定浏览器发出的http请求时,哪些域名要携带这个cookie Path :指定浏览器发出http请求时,哪些路径要携带Cookie
- Expires/Max-Age
cookie过期时间
- Secure/HttpOnly
Secure属性指定浏览器只有在加密协议https下,才将cookie发送到服务器 HttpOnly属性指定该cookie无法通过JavaScript脚本拿到,主要是Document.cookie属性,XMLHttpRequest对象和RequestAPI 都拿不到该属性,这样就防止了该属性被脚本读到,只有浏览器发出HTTP请求时,才会带上该cookie
http头对cookie的读写
- 写入浏览器 http返回头中Set-cookie向浏览器写入一条,如果向写入多个,就多个Set-Cookie头
Set-Cookie: username=jimu; domain=jimu.com; path=/blog; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly
- 发送cookie http请求头的cookie会将符合条件的所有cookie一并发给服务端
Cookie: username=jimu; height=180; weight=80
前端对cookie的读写
前端可以自己创建cookie,如果服务端的cookie没加httpOnly那也可以修改服务端创建的cookie
- 创建、修改
document.cookie可以创建,修改cookie,一次只能操作一个cookie,key不存在即是创建,key存在即是修改
document.cookie = 'username=jimu; domain=jimu.com; path=/blog; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly';
- 读取
能读取到所有的非
HttpOnlycookie
console.log(document.cookie)