关于 webapi 保持客户端登录

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


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

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



补充:

我说的token 存session 的意思是,数据库存一个token,session 存一个token;
用户首次登录后,把token存入数据库,并存入session中。然后session 过期前,这个用户的所有请求都通过session的token来 验证身份。当session失效后,app (后台服务)重新登录一次(用户不可见);把数据库的token拿出来存入session;然后继续操作;
客户端请求接口的时候会带上token,在调用资源前 拿服务器的token(存在session里的) 跟 客户端的token 匹配;而不是每次都 从数据库里拿出来;
...全文
425 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
怀谨 2016-12-27
  • 打赏
  • 举报
回复
嗯嗯,我决定采用redis 来 保存我的登录用户信息; 确实,在webapi 使用 session 有点 奇怪了 哈哈! 谢谢各位前辈的回复,对我的帮助很大!
正怒月神 版主 2016-12-27
  • 打赏
  • 举报
回复
我是把token使用redis缓存起来的。 你不想存数据库,那就缓存起来。
  • 打赏
  • 举报
回复
token怎么可能存session,你每次访问webapi都没传递sessionid,也就是对服务器来说,每次访问都是一个全新的用户,存数据库本身是可行的,但io之类的消耗太大,所以一般这些东西都是存cache里面的,至于是memory还是redis之类的,就看你实际需求了
  • 打赏
  • 举报
回复
另外,实际上应该弃用 Session 集合,而应该使用 Cache。这样的设计更明确。 Session、Application 集合等都是从 ASP 继承来的。但是在 ASP 中实际上也还是有“丢失”的问题,只不过那个时候网站就崩溃了。而 IIS+Asp.net 把它当作“常态”来使用,随便删除一个目录(在 app_data 目录以外的目录)就丢失了,随便扫描一下 bin 下的文件就丢失了,等等无数种情况。因此 Session 集合应该放弃使用,而是用更明确的 Cache。
  • 打赏
  • 举报
回复
如果你纠结什么东西都不行,那么你连加减乘除赋值语句都会去纠结“更好的想法”,那么你什么都不会做了。 本来就应该这样设计程序,但是初学者没有在刚学编程时获得基于实践的知识,而是一些想当然的语法知识(例如欺骗初学者说 Session 集合可以持久保持数据)。当你实际去工作的时候,肯定需要复杂一点去处理。所谓纠结“更好的”,其实没有技术。
  • 打赏
  • 举报
回复
本来就是这样设计程序啊? 你所谓的“更好的”有什么意义?

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧