cookie的起源以及作用
在web早期的时候,web的主要作用是浏览,也就是读取网上的信息,随着网上用户的不断增加,进入了web2.0时代,也就是交互式的web逐渐兴起,因为http是无状态的,所以服务端并不知道是哪个用户与服务端进行了交互,据说cookie最初诞生是为了保存网上购物的历史记录的,然而cookie并成为了解决http无状态和交互式web的答案。
直到现在cookie的主要作用依旧是用来存储一些来自服务端的特殊信息,当客户端带着这些特殊的信息给服务端发送请求时,服务端就能知道客端端的状态。
session的起源以及作用
自从用了cookie之后,很多服务端就把用户的信息直接保存在客服端的cookie之中,但是后来发现因为信息存在客端端上,客户可以随意查询和修改,程序员们认识到存储在cookie之中的东西时不安全的,于是session就诞生了。
session 中文时会话的意思,也就是在访问服务端的时候,你与服务端建立的一个连接,服务端只发给你一个sessionId给客户端保存在cookie里,而这个会话中的重要信息则保存在服务端,只要在会话连同的期间,用户进行网页跳转以及购物点赞,任何操作都会比较丝滑,而这些操做的重要信息保存在服务端之中所以相对把用户信息放在用户端的cookie之中安全了很多,但是随着用户数量的增加,服务器中的session不断增加,服务器逐渐不堪重负。
token
token就是一个令牌用于认证身份的,上面所说的sessionid,是通过哈希算法获取的一段字符串,也是一种token,用了token之后就可以避免用户多次通过账号密码进行认证,但是传统的sessiontoken需要存在服务端的数据库中,当客户端发送请求时可以与数据库中的的token验证就能知道是哪一个用户发送的请求,因为token是用于用户验证而且存在客户端的cookie,所以不安全,一般的token是有效期是比较短的。
refreshToekn
为了用户安全一般token的有效期不是很长,当token过期之后,用户就需要重新登录账号密码来获取新的token,这样对用户体验不是很好,于是就有了refreshToken,refreshToken的有效期要比token长一些,如果token过期了,但是refreshToekn没有过期,客户端就会重新发放新的token与refreshToken,这样就减少了用户账号登录的次数,让用户体验更佳。
jwt
jwt全名json web token,是一种josn格式的token,分为三部分,第一部份表示使用的加密算法,第二部分存储一个非敏感信息,例如用户名,token到期时间,之类的信息,最后一个就是一个密钥值,这个密钥值是通过前两部分信息在加上一个盐值,通过哈希加密得出来得一串字符串,最后一个密钥值也是为了防止前面两部分得数据被篡改,当服务端拿到了来自客户端得jwt时,需要将前面得数据和那个盐值在进行一个哈希加密,如果得到了密钥值和传来得一样,那个说明没有被篡改,然后根据第二部分传来得用户名即可知道是哪一个用户发来得请求以及令牌是否过期,这样就不用将这个token存在服务端得数据库中,也不需要在数据库中查询token是否过期。
随着互联网用户的增加,用户认证使用jwt会比seesionID节省更多的服务端内存开销,也可以减少数据库访问次数,随着前后端项目的火热,jwt更容易实现跨域问题,所以使用jwt作为web用户认证是一种更好的选择。