一、为什么会有它们?
HTTP协议是无状态的,客户端想和服务端通信,需要连接通信,因为HTTP是无状态的,所以每次的通信都会重新连接一次,而且下次请求和上次请求是没有关系的。为了解决这个问题。为了让服务端知道客户端(访问浏览器的用户)是谁,所以给客户端整了一个身份证:session、cookies、token、sign。客户端使用这个身份证访问服务端,服务端就知道原来是你小子。
二、cookies:
Cookies是保存在客户端或者说是浏览器中的一小块数据,大小4KB左右,浏览器每次请求会携带 cookie 在请求头中。
🏻cookie有2种存储方式,一种是会话性,一种是持久性:
- 会话性:如果cookie为会话性,那么cookie仅会保存在客户端的内存中,当我们关闭客服端时cookie也就失效了
- 持久性:如果cookie为持久性,那么cookie会保存在用户的硬盘中,直至生存期结束或者用户主动将其销毁。
cookie我们是可以进行设置的,我们可以人为设置cookie的有效时间,什么时候创建,什么时候销毁。
客户端与服务端之间的状态流转,如图所示:
从上图中可以看到使用 cookie 进行用户确认流程是比较简单的,大致分为以下几步:
- 客户端发送请求到服务端(比如登录请求)。
- 服务端收到请求后生成一个 session 会话。
- 服务端响应客户端,并在响应头中设置 Set-Cookie。Set-Cookie 里面包含了 sessionId,它的格式如下:Set-Cookie: value[; expires=date][; domain=domain][; path=path][; secure]。其中 sessionId 就是用来标识客户端的,类似于去饭店里面