Token在android中的使用

  首先Token是一个怎么样的东西,Token存在的意义又在哪里?学过php或是其余web开发的人都知道一个东西叫session和cookie,这些东西能够在服务器或是本地保存一些东西,好比说登陆状态,当用户登陆后能够经过session或是cookie在本地保存一段时间的登陆状态,在这段时间内,用户再度登陆的时候就不用再输入用户名和密码了,可是过了一段时间后,用户须要再次进行身份认证,这样一来的话,一方面节省了不少操做的步骤提高了操做体验,同时也节省了不少服务器请求,提升了服务器性能,同时也保证了必定的安全性。php

  那么这个功能如何在android中实现呢?很惋惜的是在android中并无直接提供相似session或cookie的东西,这个时候就是经过Token来完成。Token的存在更像是一个令牌,好比说当咱们须要实现具备用户权限的操做时,每一次操做都须要向服务器发送请求,让服务器完成在数据库中进行用户名和密码,这些显然对于服务器的性能是很不利的。固然有人也会说咱们能够在一次请求成功后将相似于user_id的东西保存在本地,之后每次请求的时候用user_id进行操做,这样不是就下降了服务器的负担,可是这样的话存在一个问题,就是user_id一旦存储在本地的时候,不是太有可能会自动回收掉,这样一来的话就会致使一个问题,就是app不管什么时候打开都是验证经过的状态,这样一来安全性下降。而Token就是解决这样一个问题的东西:android

     Token的定义:Token是服务端生成的一串字符串,以做客户端进行请求的一个令牌,当第一次登陆后,服务器生成一个Token便将此Token返回给客户端,之后客户端只需带上这个Token前来请求数据便可,无需再次带上用户名和密码。程序员

    了解了Token的意义后,咱们就更明确的知道为何要用他了。web

    一、用设备号/设备mac地址做为Token(推荐)数据库

    客户端:客户端在登陆的时候获取设备的设备号/mac地址,并将其做为参数传递到服务端。安全

    服务端:服务端接收到该参数后,便用一个变量来接收同时将其做为Token保存在数据库,并将该Token设置到session中,客户端每次请求的时候都要统一拦截,并将客户端传递的token和服务器端session中的token进行对比,若是相同则放行,不一样则拒绝。服务器

    分析:此刻客户端和服务器端就统一了一个惟一的标识Token,并且保证了每个设备拥有了一个惟一的会话。该方法的缺点是客户端须要带设备号/mac地址做为参数传递,并且服务器端还须要保存;优势是客户端不需从新登陆,只要登陆一次之后一直可使用,至于超时的问题是有服务器这边来处理,如何处理?若服务器的Token超时后,服务器只需将客户端传递的Token向数据库中查询,同时并赋值给变量Token,如此,Token的超时又从新计时。微信

    二、用session值做为Tokencookie

    客户端:客户端只需携带用户名和密码登录便可。session

    客户端:客户端接收到用户名和密码后并判断,若是正确了就将本地获取sessionID做为Token返回给客户端,客户端之后只需带上请求数据便可。

    分析:这种方式使用的好处是方便,不用存储数据,可是缺点就是当session过时后,客户端必须从新登陆才能进行访问数据。


不是闷骚的程序员算不上程序员。个人微信公众号“那点鼻事”,在这里周一到周五天天一篇文章,与技术无关,只哈牛逼。

相关文章
相关标签/搜索