在面试中被问到。为什么要token验证,而不是使用session?除了session存储在cookies中,非浏览器环境做验证比较困难,别的没有想到,此处查找资料后记下来。
Http是一个无状态协议,如果客户端需要继续操作每次都需要重新传递信息。所以需要客户端登录后由服务端授予一个标识,下次客户端如果带上这个标识则服务端会识别出这个用户。
这个标识一般使用Session或Token。
Token与Session
Session是存储在服务端的会话,登录成功后,客户端在cookies拥有一个sessionId。当访问的时候cookies将id带过去,服务端通过id,找到会话信息。
Token是无状态的一串令牌,当用户登录后返回的token字符串,字符串包含一定的用户信息。当token字符串未失效时,使用token获取用户登录信息。
区别
token更多是对用户进行认证,然后对某一个应用进行授权。让某个应用拥有用户的部分信息。这个token仅供此应用使用。
session像是这个用户登录了应用,用户把全部信息存放在此应用,应用拥有完整的用户信息。
Token的优点
无状态
服务端不存储状态,多服务器session需要同步信息。
存储简单
可以使用浏览器的localStorge等,APP也可以使用自带数据库存储字符串。且不会出现cookies出现跨域问题。
携带信息
token可以用JWT来携带部分不太敏感的信息比如用户ID等,服务器只要解密token即可使用部分信息。
JWT http://blog.leapoahead.com/2015/09/06/understanding-jwt/