Session
Session是一种在服务器端记录用户信息的技术,一般Session用来在服务器端与客户端之间共享数据。
Cookie
Cookie是一种在客户端记录用户信息的技术,因为http协议是无状态的,为了解决这个问题而产生了Cookie。
Cookie存于浏览器内置Cookies中。如图:
Cookie是一段不超过4KB的小型文本数据,由一个名称(Name)、一个值(Value)和其它几个用于控制Cookie有效期、安全性、使用范围的可选属性组成。
客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的地址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。
Session与Cookie
Session一般情况下依赖于Cookie,Session创建出来把sessionId通过Cookie传递,客户端请求时再传递给服务器。因此需要确认浏览器是否开启Cookie存储。
基于服务器端的验证如下:
1.用户通过用户名和密码发送请求。
2.程序校验,如果客户端请求不包含sessionId,则服务器为此客户端创建一个session并且生成一个与此session相关联的sessionId,并返回SESSIONID标识给客户端。
4.客户端储存SessionId于Cookies中,每次发起请求浏览器将自动携带Cookie到服务器端。
5.服务器端检索。检索成功则返回请求数据,检索失败则返回错误码。
如图:
Token
基于Token的身份验证是无状态的,我们不需将用户信息存在服务器或Session中。
基于Token的身份验证的过程如下:
1.用户通过用户名和密码发送请求。
2.程序校验,校验成功后就返回Token给客户端。
4.客户端储存Token,每次访问API携带Token到服务器端。
5.服务器端采用filter过滤器校验。校验成功则返回请求数据,校验失败则返回错误码。
每次请求token应该在HTTP的头部发送从而保证了Http请求无状态。我们可以通过设置服务器属性Access-ControlAllow-Origin:* ,让服务器能接受到来自所有域的请求。
过程如图:
总结
Session和Cookie,Token 都是作用于服务器端与客户端的数据共享。
Session是基于服务器的验证,随着Web移动端兴起,也逐渐暴露了一些内存开销、可拓展性、跨域问题 ,Token这种方式恰好能够解决这些问题,虽然服务器涉及得更多,但是也方便了我们前端去解决跨域等问题。
参考:
https://www.cnblogs.com/moyand/p/9047978.html
https://blog.csdn.net/Deft_MKJing/article/details/53762277