issues
search
cassiehuang
/
study
学习笔记整理
2
stars
0
forks
source link
cookie && session
#24
Open
cassiehuang
opened
5 years ago
cassiehuang
commented
5 years ago
cookie是http协议的一部分,因为http是无状态的,但web服务器很多时候都需要状态,所以产生了cookie技术
浏览器和服务器都可以设置cookie
服务器设置cookie,一般使用http的set-cookie头,并且需要设置res.header('Access-Control-Allow-Credentials', true)使浏览器可以根据头部信息,自动设置cookie
浏览器设置cookie,document.cookie = '';
浏览器向服务器发起请求,想要跨域带上凭证(如cookie),需要设置withCredentials = true
服务器端设置cookie
为了使浏览器脚本无法更改cookie,可以设置头部httpOnly,这样可以避免xss攻击修改cookie
path匹配到路径才发送cookie
secure 当为true时,cookie在http中无效,在https中才有效。
session
session是将信息存放在服务器,然后向客户端发送一个session id,然后将session id 存放在cookie,每次通过请求发送到服务器,服务器通过session id获取session data
cookie存放内容少,数量有限制,不安全,但可用性高
session存放无限制,占用服务器内存,安全性更高
cookie的生命周期
一种不设置过期时间,则为会话cookie,关闭浏览器窗口,cookie就消失,存放在内存里
设置了过期时间,cookie会存放在硬盘中,直到过期时间
cassiehuang
commented
5 years ago
cookie, session
用户输入的表单,传到服务器,服务器生成一个session id,作为对用户身份的认证
session id 通过response头部信息传给客户端
客户端接收到带有session id的response,自动将其存入cookie
没有发起请求时,将cookie放入request头部
因为session id相当于用户身份的验证,所有,应尽量保证session id不被盗取,可以使用httpOnly来设置cookie,阻止客户端通过js来读取session id
即使设置了httpOnly,仍然有可能被盗取session id,所以,必须在服务器设置过期时间
即使session id已经被盗取了,但是密码仍然保密,在使用更加密的操作时,可以要求必须输入密码的方式,才能验证通过。
用户名和密码表单验证时,信息不会被保存下来,下次请求无法确认用户身份,所以才使用cookie,如果直接将用户名和密码存入cookie,只要读取cookie,用户信息就全被泄漏了,安全性极低
表单验证使用HTTPS的方式,可以保证通信上的安全,使用了报文的加密处理,认证证书,以及完整性检查,避免在通信过程中被窃听,被伪装,被篡改的危险
服务器端设置cookie
session
cookie的生命周期