一,Cookie
1.什么是Cookie
Cookie是浏览器提供的持久化存储数据的机制;我们都知道HTTP协议自身属于“无状态”协议,默认情况下HTTP协议的客户端和服务器之间的这次和下次通信之间是没有直接联系的;但是实际开发中,很多时候需要知道请求之间的关联的(例如网站登录成功后,第二次访问的时候服务器就能知道该请求是否已经登录过了)
![](https://img-blog.csdnimg.cn/img_convert/16fdd3f3a14b4763b63d172175f3b275.png)
2.Cookie是从哪来的
Cookie是从服务器返回给浏览器的,服务器代码中由程序员决定要把啥样的信息保存到客户端这边,Cookie可通过HTTP响应的Set-Cookie字段把键值对写回去
3.Cookie到哪里去
Cookie会在后续浏览器访问服务器的时候带到请求的header中发送给服务器(因为服务器不止给一个客户端服务,同一时刻要处理多个客户端,此时服务器可以通过Cookie中的值来识别当前客户端是谁,当前客户端的服务提供到哪个环节了)
4.Cookie存储在哪
Cookie存储在浏览器(客户端)所在主机的硬盘中,浏览器会根据域名来分别存储
5.Cookie的作用
Cookie的用途很多,它的典型应用是:表示用户的身份信息
图示为PC端网页版淘宝登录功能:
![](https://img-blog.csdnimg.cn/img_convert/8bacd4ccdb4c497b81568bf2b62e5523.png)
二,Session(会话机制)
1.什么是Session(会话机制)
服务器同一时刻收到的请求是很多的,服务器需要清楚的区分清楚每个请求是从属于哪个用户,就需要在服务器这边记录每个用户令牌(sessionId)以及用户的信息的对应关系(上述淘宝登录的案例中服务器返回给浏览器的身份序号就是用户令牌sessionId,每个身份序号都会对应一个用户的身份信息)
会话的本质就是一个“哈希表”,存储了一些键值对,key就是令牌的ID(session/token),value就是用户信息(用户信息可以根据需求灵活设计),sessionId是由服务器生成的一个“唯一性字符串”,从session机制的角度来看,这个唯一性字符串称为“sessionId”,但是站在整个登录流程中看待,也可以把这个唯一性字符串称为“token”
2.Session和Cookie的关联
当用户登陆的时候, 服务器在 Session 中新增一个新记录, 并把 sessionId / token 返回给客户端. (例如通过 HTTP 响应中的 Set-Cookie 字段返回).
客户端后续再给服务器发送请求的时候, 需要在请求中带上 sessionId/ token. (例如通过 HTTP 请求中的 Cookie 字段带上).
服务器收到请求之后, 根据请求中的 sessionId / token 在 Session 信息中获取到对应的用户信息, 再进行后续操作.
3.Session和Cookie的区别
Cookie 是客户端的机制. Session 是服务器端的机制.
Cookie 和 Session 经常会在一起配合使用. 但是不是必须配合.
完全可以用 Cookie 来保存一些数据在客户端. 这些数据不一定是用户身份信息, 也不一定是token / sessionId
Session 中的 token / sessionId 也不需要非得通过 Cookie / Set-Cookie 传递.