V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
coluo
V2EX  ›  Android

请问 Android 要怎样实现持久化登录啊?

  •  
  •   coluo · 2016-11-21 11:45:15 +08:00 · 7013 次点击
    这是一个创建于 2726 天前的主题,其中的信息可能已经有所发展或是发生改变。
    求高手分解一下,目前实现的方法是 Android 拿到后台返回的 cookie ,保存在本地,下次用户打开 APP 的时候就用之前保存的 cookie 去请求,可以实现持久化登录。

    但不晓得为什么在某些机型上面,还是会出现无法持久化登录的问题,求高手给点思路,谢谢了!
    20 条回复    2016-11-22 11:24:16 +08:00
    ifane
        1
    ifane  
       2016-11-21 12:21:23 +08:00
    一些手机会无法持久化 Cookie,我觉得可能是下面我碰到的那种情况,而和手机无关。
    你是不是模拟登录爬取一些数据。我也出现过这种情况
    我个人猜测,是 Cookie 到期了,
    Cookie 的有效期是看服务器那边怎么设定的。有的网站用户不执行操作, Cookie 就会过期。
    所以经常会有过了几天,就要重新登录。
    maijiawei
        2
    maijiawei  
       2016-11-21 12:24:00 +08:00
    access token
    Chrisplus
        3
    Chrisplus  
       2016-11-21 13:14:07 +08:00
    都说了是某些机型,就是他们的持久化出问题了呗。
    coluo
        4
    coluo  
    OP
       2016-11-21 13:40:17 +08:00
    @ifane 应该不会,因为后台 cookie 有效期设置的是 30 天,但出现这个问题的机器,一天要重新登录好几次。
    coluo
        5
    coluo  
    OP
       2016-11-21 13:42:11 +08:00
    @maijiawei 意思是要用 oauth 交换数据?
    814084764
        6
    814084764  
       2016-11-21 13:42:42 +08:00
    首先确认一下是不是 cookie 没有保存下来。如果没有保存下来,就找出元婴。如果保存下来了,再看 cookie 是否有问题,超时?调用不对?。
    coluo
        7
    coluo  
    OP
       2016-11-21 13:42:56 +08:00
    @Chrisplus 你是指用户机器的问题吗? 但是出问题的机器登录微信、 QQ 这些软件又是正常的
    coluo
        8
    coluo  
    OP
       2016-11-21 13:44:25 +08:00
    @814084764 我抓包的时候发现接口里面是有 cookie 的,也就是说 cookie 是保存成功了的。
    coluo
        9
    coluo  
    OP
       2016-11-21 14:45:54 +08:00
    @814084764 按理说 cookie 保存成功,然后去访问接口,接口验证不过,问题应该是在后台,但又不是每一台机器都这样,就有点让人摸不到头脑
    xzwc
        10
    xzwc  
       2016-11-21 15:05:51 +08:00
    看看是否过期了,带着这个 cookie 参数去请求服务器,看返回啥结果,如果服务器做容错处理的话应该很容易排查到错误了
    Chrisplus
        11
    Chrisplus  
       2016-11-21 15:22:41 +08:00
    @coluo 看了你的描述,你的后端在验证的时候,除了 cookie 是否还向设备请求了其他信息,如 device id , imei 等等做设备认证?如果是以上情况的话,有些机型(华强北)可能是无法提供正确信息的,以导致验证一直不过。具体在后台看看就可以了
    winglight2016
        12
    winglight2016  
       2016-11-21 15:25:46 +08:00
    如果是自己的后台服务,那么通常的做法是使用 tokenid 而不是 cookie ,用 cookie 是浏览器的做法,不是 APP 的
    koche
        13
    koche  
       2016-11-21 16:02:25 +08:00
    token authentication
    coluo
        14
    coluo  
    OP
       2016-11-21 16:09:06 +08:00
    @Chrisplus 谢谢,但不是这个情况,后台只是记录了 deviceid 、设备信息、版本等,但没用这个做登录判断。
    coluo
        15
    coluo  
    OP
       2016-11-21 16:10:22 +08:00
    @winglight2016 恩,主要是后端还需要兼顾到 web 端;
    iFlicker
        16
    iFlicker  
       2016-11-21 16:10:44 +08:00
    大概稳妥一点的话。。移动端都是 token ?
    coluo
        17
    coluo  
    OP
       2016-11-21 16:11:35 +08:00
    @iFlicker 是的
    GhostFlying
        18
    GhostFlying  
       2016-11-21 16:22:28 +08:00
    自己的服务的话,看下失效后客户端请求带的参数?以及持久化写的是哪里?应用存储?
    winglight2016
        19
    winglight2016  
       2016-11-22 10:10:43 +08:00
    @coluo 现在后台不都 API 化了吗?是 web 跟 APP 兼容,而不是反过来
    zjsxwc
        20
    zjsxwc  
       2016-11-22 11:24:16 +08:00
    没有持久化登录,都是 app 本地保存密码,发现没登录就自动刷登录接口刷新 cookie ,以前给手机端写过刷登录 cookie 服务端接口
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   6204 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 06:11 · PVG 14:11 · LAX 23:11 · JFK 02:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.