http超文本传输协议

无状态协议:这一次请求和上一次请求是没有任何关系的,好处是快速,坏处是网页之间不能共享数据,例如登录信息等

 

cookiesession

由于http的无状态性,为了使某个域名下的所有网页能够共享某些数据。

客户端访问服务器的流程如下:

a.首先,客户端会发送一个http请求到服务器端。

b.服务器端接受客户端请求后,建立一个session,并发送一个http响应到客户端,这个响应头,其中就包含Set-Cookie头部,该头部包含了sessionId

c.在客户端发起的第二次请求,假如服务器给了set-Cookie,浏览器会自动在请求头中添加cookie

d.服务器接收请求,分解cookie,验证信息,核对成功后返回response给客户端

 

Token:令牌

uid+time+sign[+固定参数]组成

uid: 用户唯一身份标识

time: 当前时间的时间戳

sign: 签名, 使用 hash/encrypt 压缩成定长的十六进制字符串,以防止第三方恶意拼接

固定参数(可选): 将一些常用的固定参数加入到 token 中是为了避免重复查库

存放:localStorage,cookie,或sessionStorage中。在服务器一般存于数据库中

 

基于Token的身份验证方法

使用基于Token的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:

a.客户端使用用户名跟密码请求登录; 

b.服务端收到请求,去验证用户名与密码; 

c.验证成功后,通过一些算法,加一个密钥,生成一个token,再把这个Token发送给客户端; 

d.客户端收到Token以后可以把它存储起来,比如放在Cookie里或者Local Storage里;

e.客户端每次向服务端请求资源的时候需要带着服务端签发的Token

f.服务端收到请求,然后去验证客户端请求里面带着的Token,如果验证成功,就向客户端返回请求的数据。

注意两点:

1.token需要代码才能带上

2.token可以不需要存储空间(JWT),通过算法和密钥验证

 

sessionID的生成方式

a.浏览器第一次访问服务器时,服务器创建一个session,同时生成一个唯一的会话key,即sessionID

b.接着sessionIDsession分别作为keyvalue保存到缓存中,也可以保存到数据库中,

c.然后服务器把sessionIDcookie的形式发送给浏览器,

d.浏览器下次访问服务器时直接携带上cookie中的sessionID

e.服务器再根据sessionID找到对应的session进行匹配

注意两点:

1.sessionID会自动由浏览器带上

2.session是需要存储空间的

 

cookie机制和session机制的区别

cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。

 

posted on 2021-10-24 15:32  smile学子  阅读(38)  评论(0编辑  收藏  举报