HTTP 是一种没有状态的协议,也就是它并不知道是谁是访问应用。这里我们把用户看成是客户端,客户端使用用户名还有密码通过了身份验证,不过下回这个客户端再发送请求时候,还得再验证一下,解决的方法就是,当用户请求登录的时候,如果没有问题,我们在服务端生成一条记录,这个记录里可以说明一下登录的用户是谁,然后把这条记录的 ID 号发送给客户端,客户端收到以后把这个 ID 号存储在 Cookie 里,下次这个用户再向服务端发送请求的时候,可以带着这个 Cookie ,这样服务端会验证一个这个 Cookie 里的信息,看看能不能在服务端这里找到对应的记录,如果可以,说明用户已经通过了身份验证,就把用户请求的数据返回给客户端
使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:
(1)当用户首次登录成功之后, 服务器端就会生成一个 token 值. 1.会在服务器保存token值(保存在数据库中) 2.将这个token值返回给客户端.
(2) 客户端拿到 token 值之后,一般保存在两个位置 : 1. 将 token 保存在 cookie 中; 2.将 token 保存在沙盒中,作为一个公共参数传递.
(3)公共参数: 每一个网络请求都需要的参数! 一般公共参数有很多都是"可选"参数!,公共参数附带的越多,越利于后台监测用户,数据挖掘会使用到监测到的数据.
(4)以后客户端再次发送网络请求(一般不是登录请求)的时候,就会将这个 token 值附带到参数中发送给服务器.
(5)服务器接收到客户端的请求之后,会取出token值与保存在本地(数据库)中的token值做对比!
(6)如果两个 token 值相同 :说明用户登录成功过!当前用户处于登录状态!
(7)如果没有这个 token 值, 没有登录成功.
(8)如果 token 值不同: 说明原来的登录信息已经失效,让用户重新登录.
传递token的作用:防止表单重复提交
主要原理是:用户提交表单后,会携带token到服务器,服务器将session中的token和用户请求带过来的token进行比较,如果相同,会将session中的token进行更新。若用户重复提交,则用户之后发过来的请求的token和服务器session中的token是不一致的,所以会导致之后的表单提交操作失败