http请求是种无状态的请求,每一个http请求之前都没有关联,而在日常中,我们常常需要访问一些受限的页面,比如,登陆网易云之后,访问自己收藏的歌单,或者干别的事,每次都带了个http请求,之前说了http是无状态的,就是说服务器只有一次性的记忆,之前登陆成功,但你发起下一次请求时,服务器可不会记得你是否完成了认证,这时候就需要有一种机制,在每次访问时,告诉服务器,xxx已经完成了认证,cookie和token就可以帮我们做这个事
关于token的设置
token的作用是提供一种可靠的认证方式,可以防止跨站请求伪造,一般在用户登陆之后,生成一个token返回给http client,然后通过一定方式保存,在访问受限页面时,携带这个token,这样,服务器就知道你完成了认证
但是,这样又有一个问题,服务器说,我怎么知道token是真的还是假的(搞siao,你自己给的token你不知道?),好吧,服务器记性不好,解决这个问题的方式有两种:
- 保存token,对于每一个登陆的用户,都保存token,保存的方式可以是内存,磁盘,数据库,这样就赖不了了
- 其他方式
服务器又开始抱怨,我用户有几十万,难道还要一个个的给他们保存token吗,好吧,一个个保存的,的确是有他的弊端,用户规模大起来,维护起来很不方便,想想其他办法吧
其他办法:
为了确保安全性,token采用md5或者sha系列(sha1,sha256)方式加密,通过对用户名加上其他字符串(密钥)的方式完成加密,然后在访问受限页面时携带token,并且在头部携带用户名,然后到了服务器这边,进行校验,即用用户名+密钥,采用相同的加密方式加密,然后与token比对,如果一样,就说明这个token是真的
2.token的过期时间设定
这个的话,可以利用cookie,毕竟浏览器还是需要保存下token的,这时候可以利用cookie,cookie有一个过期时间设置,这样过期时间的问题也解决了
总结一下:1.token的生成,用户名+密钥,密钥可以是固定的字符串
2.token的认证,服务器端,获得的用户名+密钥加密,然后与token核对
3.token的保存,保存在cookie
4.token的过期时间设定,利用cookie的过期时间