为啥要有Cookie和Session: 由于http协议是无状态的,数据传输完成后就会断开连接,后续再进行http的请求,后台无法知晓是谁在发送请求。所以需要有cookie和session来跟踪用户会话,保持用户状态。
Cookie
Cookie存放在客户端,是一串字符串,可以存储的信息十分有限,一般最多只有4M
想要设置cookie的有效时间则可以通过设置maxAge来实现,maxAge为正数,浏览器则会将cookie保存至客户端中,如果为负数,则会在客户端关闭浏览器后立即将其清除,这里注意 在客户端maxAge是无法可读,也无法进行设置的,cookie的所有属性都只是提供给浏览器进行信息判断
而由于cookie会在每次http请求时都携带,也大大增加了信息被窃取的风险,所以我们一般不会在cookie中存放比较重要的信息
- 如果不希望cookie在http等非安全性协议中传输,可以设置cookie的
secure属性为true - 设置
domain字段,决定哪些域名可以访问这个cookie - 设置
path字段,则决定当前可访问域名下,哪些路径可以访问这个cookie
Session
Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了
Session一般情况下存放在服务端,当客户端首次登陆时,服务端会产生一个name为JSessionID的cookie,后续客户端只需要在每次发送请求时携带上这个JSessionID,服务端通过查询这个JSessionID就能知晓是哪个用户在发送请求了。
为了获得更高的存取速度,服务器一般把Session放在内存里。每个用户都会有一个独立的Session
但是这样又会产生问题,如果Session内容过于复杂,当大量客户访问服务器时服务端将会保存大量的Session数据,产生巨大的内存开销
如何解决这个问题呢?
将内存问题转化为运算问题,在服务端不保存这个SessionID,而是通过每次解析返回来的SessionID,查看解析结果是否能与数据库中的字段相对应
而其实这种方式,就是所谓的Token
Token
token可以保存在LocalStoreage中,这样就避免了像cookie默认每次请求时都被携带/ 我们可以在代码中去读取本地的token,手动把它写入到header中