Android APP开发实战:从规划到上线全程详解
上QQ阅读APP看书,第一时间看更新

3.4 登录状态的维持

目前APP大都支持长登录,就是用户登录一次后,如果用户没有主动注销、清除APP缓存数据或卸载APP,就可以在一段时间内一直保持登录状态。

3.4.1 利用Token实现

APP登录成功后,服务器以某种方式,如随机生成N位的字符串作为Token,同时设置一个有效期,存储到服务器中,并返回Token给APP, APP把此Token的值保存在本地。

后续APP在发送请求时,都要带上该Token。每次服务器端收到请求时,都要验证Token和有效期,Token数值正确且在有效期内,服务器返回所需要的结果,否则返回错误信息,提示用户重新登录。登录成功后,服务器返回数据给APP,如下所示。

        {
            "code": 800 //表示登录成功
            "result":{
                  "token":"abcd1234"
            }
        }

APP再次发送请求时,把接收到的Token值也发送给服务器,如下所示。

        {
            "version":1.0,
            "token":"abcd1234",
            "params":{
                  "categoryId":1,
                  "offset":0,
                  "limit":10
            }
        }

3.4.2 利用Cookie实现

APP登录成功后,服务器创建一个包含SessionId和Expires两个属性值的Cookie,存储在服务器中,并发送给APP。

后续APP发送请求时,都要带上一个包含此SessionId的Cookie。服务器每次收到请求时,都要验证SessionId和有效期,SessionId数值正确且在有效期内,服务器返回所需要的结果,否则返回错误信息,提示用户重新登录。这种方式类似浏览器的认证方式。

当APP登录成功后,服务器端返回Cookie给APP,如图3-2所示。

图3-2

APP后续再发起请求时,把之前获取的Cookie信息发送给服务器,如图3-3所示。

图3-3

3.4.3 利用账号和密码实现

APP登录成功后,每次发送请求时都把账号和密码也发送给服务器,服务器每次收到请求都要验证账号和密码。如果用户没有登录或已注销,发送请求时就不会把账号和密码发送给服务器。

例如,账号是aaaa,密码是123abc,登录成功后,APP后续发送请求时,可按如下形式:

        {
            "version":1.0,
            "authCode":"070cb3abda10fa1d50e4b0c2b71ac561", // "aaaa+123abc"MD5数值
            "params":{
                  "categoryId":1,
                  "offset":0,
                  "limit":10
            }
        }

服务器记录处于登录状态的账号和密码的MD5数值,与APP端上传的数值进行比较,判断账号和密码是否有效。