Home  >  Q&A  >  body text

.net - 关于android 保持登录问题

背景:

客户端是android;
服务端是webapi;
当我android登录之后,服务端会返回登录信息(包含token);
android保存登录信息至本地,此后就不需要再进行登录;
然后每次请求api 带上 token ,验证用户;

那么我问题来了,如果我把token 存数据库 ,那岂不是每次访问请求都需要去数据库验证用户?
如果我把token存session,那这个session 丢失怎么办?还有需要设置很长的效期?

各位老司机有没有更好的想法?


补充:

我说的token 存session 的意思是,数据库存一个token,session 存一个token;
用户首次登录后,把token存入数据库,并存入session中。然后session 过期前,这个用户的所有请求都通过session的token来验证身份。当session失效后,app (后台服务)重新登录一次(用户不可见);把数据库的token拿出来存入session;然后继续操作;
客户端请求接口的时候会带上token,在调用资源前 拿服务器的token(存在session里的) 跟 客户端的token 匹配;而不是每次都从数据库里拿出来;

巴扎黑巴扎黑2631 days ago614

reply all(6)I'll reply

  • PHP中文网

    PHP中文网2017-04-17 18:01:43

    可以考虑缓存,我是php开发的,一般这样的,我都是用的redis,如果是 android 原生APP 你用 session ? 当我听错了,session 是基于cookie 保存的 ,你android 原生APP 不能用 session

    reply
    0
  • PHP中文网

    PHP中文网2017-04-17 18:01:43

    看了下,题主困惑应该在后端token验证那块,token作为接口安全令牌,当然要每次请求都要去验证传入的token是否有效,无非就是效率问题。通常做法是两份数据,一个mysql(也可以是其他数据库) token表,做token持久化存储,一个redis做热数据存储,在redis进行token验证,redis存活在内存里,而且redis中数据是key value型存储,能高效命中。至于如何更新redis热数据,你们做后端的应该很拿手了,我就不班门弄斧了。

    reply
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 18:01:43

    这种一般都是用内存数据库吧?

    reply
    0
  • 天蓬老师

    天蓬老师2017-04-17 18:01:43

    ......

    reply
    0
  • 怪我咯

    怪我咯2017-04-17 18:01:43

    ..............................

    reply
    0
  • 巴扎黑

    巴扎黑2017-04-17 18:01:43

    token存session是什么意思?
    我觉得你把token保存在本地,然后APP每次启动的时候,把token读取进内存,然后每次网络请求从内存中拿token,这样就省得你每次都去数据库读取token。

    reply
    0
  • Cancelreply