用户鉴权的三种方式,Cookie、Cookie+Session、Token

      一个网站用户对动态的评论、置顶等等操作,服务器都需要对客户端验证是否有用户登录,如果无用户登录则提示用户跳转到登录页面进行登录。
      但是HTTP协议是无状态,一次请求对应一个响应,后续的系统操作,需要重新请求服务器。也就是说服务器无法识别客户端请求属于哪个用户发送的请求。
      为了保存用户登录状态,让服务器识别不同用户请求返回响应,于是就有了Cookie、Cookie+Session、Token等几种鉴权方式用于保存用户的登录状态。
      使用纯Cookie的方式,用户在登录之后将用户的id或者用户账户发送到客户端,客户端保存Cookie,客户端每次请求时自动带上保存的Cookie,服务器接收到请求时,取出Cookie的用户id来鉴别用户。但是这种方式较为不安全,因为用户id这些信息都暴露在Cookie里。
      后来为了安全又有了Session,Session接收请求后,保存一个会话id到服务器内存中,通过Cookie将此id发送给客户端,同样客户端每次请求时带上这个Cookie与服务器保存的Session ID对来鉴别用户。因为Cookie不保存用户信息,所以较为安全,但是降低了服务器的性能,因为服务器需要在内存保存Session数据。
      前后端分离的出现,带来了一种解决上述安全和性能问题的方案Token。
      Token使用非对称加密,密钥保存在服务器中,服务器将用户id写入Token,并对其加密发送给客户端。客户端接收后保存到本地,每次请求带上这个Token,Token通过密钥解析出用户id来鉴别用户。这样别人无法解析出Token加密后的用户id,服务器也不需要使用内存来保存,因为直接用密钥解析Token里的用户id即可识别用户。
      以上三种用户鉴权方式都存在过期时间,一旦过期,即使请求时带上了鉴权,服务器校验时依然会返回登陆过期提示给客户端。

你可能感兴趣的:(用户鉴权的三种方式,Cookie、Cookie+Session、Token)