又是一年初,首先祝大家新年快乐!!!
Cookie
什么是Cookie?
由于HTTP是一种无状态的协议, 服务器单从网络连接上是无法知道用户身份的. 这时候服务器就需要给客户端发一个cooki, 用来确认用户的身份.
简单的来说, cookie就是客户端保存用户信息的一种机制, 用来记录用户的一些信息.
找到Cookie
例如我们打开百度网站.
点击这个锁🔒
点击Cookie, 就可以看到此时正在使用的Cookie
Cookie的构成
服务器端向客户端发送Cookie是通过HTTP响应报文实现的,在Set-Cookie中设置需要向客户端发送的cookie,cookie格式如下:
下图是MDN里的.
例如:
Set-Cookie: "name=value;domain=.domain.com;path=/;expires=Sat, 20 May 2022 5:20:00 GMT;HttpOnly;secure"
其中, name=value是必须的, 其他是不必要的.
name是唯一确定的Cookie名称, value是储存在cookie中的字符串值, domain表示cookie对于那个域是有效的, path表示cookie影响到的路径, expires是失效时间, max-age是用来告诉浏览器cookie啥时候过期, HttpOnly是告知浏览器不允许通过脚本去更改值, secure是安全标志只有在SSL链接时才能发送到服务器.
Cookie的特点
Cookie不提供修改, 删除操作.
如果要修改某个Cookie, 只需要新建一个同名的Cookie, 添加到response中覆盖原来的Cookie
如果要删除某个Cookie, 只需要新建一个同名的Cookie, 并将maxAge设置为0, 并添加到response中覆盖原来的Cookie. 注意是0而不是负数. 负数代表其他的意义
Session
什么是Session?
Session是另一种记录客户状态的机制, 不同的是Cookie保存在浏览器中, 而Session保存在服务器上.客户端浏览器访问服务器的时候, 服务器把用户信息记录在服务器上.
客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了.
Session的工作步骤
因为Http协议是无状态的, Session不能依据Http连接来判断是否为同一个用户. 所以服务器向用户的浏览器发送一个名为JESSIONID的Cookie, 它的值是Session的id值. 这个id可以让Session依据Cookie来识别是否是同一个用户.
产生SessionID
保存SessionID
使用Session
Cookie和Session的区别
Cookie数据存放在客户端, Session数据放在服务器上
Cookie的安全性一般, 他人可通过分析存放在本地的Cookie并进行Cookie欺骗, 就不安全,所以一般选择Session更好. 重要交互信息比如权限等就要放在Session中, 一般的信息记录放Cookie中.
Session会在一定时间内保存在服务器上, 当访问增多, 会比较占用你服务器的性能考虑到减轻服务器性能方面, 应当使用Cookie.
Session 的运行依赖SessionID, 而 SessionID 是存在 Cookie 中的, 那么也就是说, 如果浏览器禁用了 Cookie, Session 也会失效 (但是可以通过其它方式实现, 比如在 url 中传递 SessionID, 也就是地址重写).