Token
参考Android客户端和服务端如何使用Token和Session
1.Token的存在?
如果一个APP,发送的每次请求,都需要保证用户登录的前提下,服务器才会相对应的操作,进行数据返还或者错误提示.如果每次登录,都需要提交用户名密码,服务器都需要去数据库去查询用户名密码的正确与否,无疑会增加服务器的负荷.
ps:或许有人会有这样的疑问,那我做的这些请求,是在保证用户登录的前提下,我就用不到了呀.
ps:如果有人将我们的软件下载下来,进行了反编译,调整Activity的顺序,就可以拿到我们的服务器地址,进行一些不好的行为,如果我们的服务器要求每次请求都携带Token的话,他就没办法进行破坏.安全性考虑
2.Token的定义?
Token是服务器生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器会生成一个Token,并将这个Token返回给客户端,以后客户端每次请求只需要带上Token来请求数据即可,无需带上用户名或密码.
ps:只需检索客户端请求携带的Token和服务器端保存的Token进行对比,便可以知道用户的登录状态.
ps:Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。
3.如何使用Token?
1).用设备号/设备mac地址作为Token(推荐)
客户端:
客户端在登录的时候,获取设备的设备号(mac地址),这个mac地址是唯一的,并将获取到的mac地址传给服务端.
登录成功以后,服务端会返回一个Token,然后后面我们每次请求的时候都携带Token请求即可.
服务端:
服务端接受到该参数后,使用一个变量来接受,同时将其作为Token保存在数据库中,缓存中等等.
客户端在每次请求的时候,都必须携带Token来进行请求,跟服务器中存储的Token进行比对,如果没有携带或者Token错误则拒绝,如果相同,则通过,并给予客户端具体的回应,
ps:此刻客户端和服务端就统一了一个惟一的标识Token,而且保证了每一个设备拥有了一个唯一的会话.服务端可以给Token设置有效期,当有效期到了以后,服务端会给客户端返回一个Token失效的状态码,然后客户端检测到这个失效的状态码的时候,重新拉起登录界面即可.
ps:
这种方式使用的好处是方便,不用存储数据,但是缺点就是当session过期后,客户端必须重新登录才能进行访问数据。
优点:加mac地址,可以根据mac地址确定每次请求的是否是同一个设备,比如微信,QQ等应用,确保应用的安全性.
2).用session作为Token
客户端:
客户端只需携带用户名和登录密码即可
服务端:
服务端接受到用户名密码后立即判断,如果正确了,就获取本地sessionID作为Token返还给客户端,客户端以后请求只需写上请求数据就可以.
ps:
这种方式使用的好处是方便,不用存储数据,但是缺点就是当session过期后,客户端必须重新登录才能进行访问数据。
网友评论