全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android使用token维持登陆状态的方法

什么是token

token(令牌)是一串唯一的字符串,通常由服务端生成,在注册完成时返回给客户端,用来标识此用户,客户端将此字符串存储在本地。在以后的网络请求时,客户端先查询本地的token,如果有则直接使用此令牌进行网络请求,没有则提示未登录,转到登陆注册界面。

此外,还可以在服务端或者客户端添加过期判别机制。

token的作用

token可以显著减少服务端对用户表的查询,同时使用户不必每次都登陆,提高了系统的可用性与健壮性。

使用SharedPreferences保存token

获取token并保存

NetWorks.regPost(user, password, email, tel, new Observer<User>() {
   @Override
   public void onCompleted() {
   }
   @Override
   public void onError(Throwable e) {    
    Log.e("LoginActivity",e.getLocalizedMessage()+"--"+e.getMessage());
   }
   @Override
   public void onNext(User user) {
    if(user.getmMessage().equals("success")){
     MainActivity.instance.finish();//结束原来的主页面
     Toast.makeText(getApplicationContext(),"注册成功",Toast.LENGTH_SHORT).show();
     //token保存到本地
     SharedPreferences sp = getSharedPreferences("loginToken", 0);
     SharedPreferences.Editor editor = sp.edit();
     editor.putString("userId",user.getmUserId());
     editor.putString("userName",user.getmUserName());
     editor.putString("phone",user.getmPhone());
     editor.putString("email",user.getmEmail());
     editor.putString("headImageUrl",user.getmHeadImageUrl());
     editor.commit();
     Intent i = new Intent(RegActivity.this,MainActivity.class);
     startActivity(i);
     finish();
    }else{
     Toast.makeText(getApplicationContext(),"注册失败"+user.getmMessage(),Toast.LENGTH_SHORT).show();
    }
   }
  });

我使用的是retrofit框架进行网络请求,上文是实现注册功能的函数,在onNext()函数中获取服务端返回的结果,这个框架自动把返回的json数据解析为对应的类对象(即上文中的user对象)。因为token的本质是唯一的字符串,userId满足这个要求,因为userId是由服务端生成且唯一,故我将userId作为token使用。

进行网络请求前查询本地token

比如点击侧边栏的头像,如果未登录则需要跳转到登陆界面,已经登陆则进入个人信息界面。这时候,就需要查询本地token进行判别。

private void initData() {
  sp = getSharedPreferences("loginToken", 0);
  name = sp.getString("userId", null);
  userName = sp.getString("userName", null);
  email = sp.getString("email", null);  
 }
@Override
 public void onClick(View view) {
  switch (view.getId()) {   
   case R.id.imageView:
    if (name == null) {
     Intent i = new Intent(MainActivity.this, LoginActivity.class);
     startActivity(i);
    } else {
     Log.d("用户ID", name);
     Intent i = new Intent(MainActivity.this, PersonInfoActivity.class);
     startActivity(i);
    }
    break;
  }
 }

备注

在此例中,我使用userId作为token,但并不建议这么做,虽然这样很简单。因为userId显然无法判别是否过期,如果我们需要实现token过期的判别,则可以采用将userId与日期拼接的方式。

此外,为了安全起见,不要在客户端生成token。

以上所述是小编给大家介绍的Android使用token维持登陆状态的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# android  # 登陆状态  # 登陆token  # Android实现带有记住密码功能的登陆界面  # Android调用微信登陆、分享、支付  # Android开发中实现用户注册和登陆的代码实例分享  # Android实现弹出登陆框的方案  # Android仿QQ登陆窗口实现原理  # 服务端  # 客户端  # 令牌  # 小编  # 的是  # 还可以  # 在此  # 是由  # 可用性  # 转到  # 给大家  # 很简单  # 我将  # 这么做  # 将此  # 每次都  # 则可  # 个人信息  # 所述  # 给我留言 


相关文章: 建站之星代理如何优化在线客服效率?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  建站之星导航配置指南:自助建站与SEO优化全解析  成都响应式网站开发,dw怎么把手机适应页面变成网页?  建站上市公司网站建设方案与SEO优化服务定制指南  如何在IIS中新建站点并解决端口绑定冲突?  简历在线制作网站免费版,如何创建个人简历?  头像制作网站在线制作软件,dw网页背景图像怎么设置?  如何在阿里云ECS服务器部署织梦CMS网站?  如何通过服务器快速搭建网站?完整步骤解析  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何在阿里云部署织梦网站?  如何快速上传自定义模板至建站之星?  Python文件管理规范_工程实践说明【指导】  如何在香港免费服务器上快速搭建网站?  如何彻底卸载建站之星软件?  济南网站制作的价格,历城一职专官方网站?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  名字制作网站免费,所有小说网站的名字?  如何快速生成可下载的建站源码工具?  高性能网站服务器部署指南:稳定运行与安全配置优化方案  如何在Golang中指定模块版本_使用go.mod控制版本号  企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?  定制建站价位费用解析与套餐推荐全攻略  IOS倒计时设置UIButton标题title的抖动问题  青岛网站建设如何选择本地服务器?  建站之星如何取消后台验证码生成?  如何生成腾讯云建站专用兑换码?  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化  兔展官网 在线制作,怎样制作微信请帖?  建站VPS推荐:2025年高性能服务器配置指南  如何在橙子建站上传落地页?操作指南详解  建站之星如何实现五合一智能建站与营销推广?  Android滚轮选择时间控件使用详解  南京网站制作费用,南京远驱官方网站?  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  营销式网站制作方案,销售哪个网站招聘效果最好?  SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  阿里云网站制作公司,阿里云快速搭建网站好用吗?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  宝塔面板如何快速创建新站点?  外汇网站制作流程,如何在工商银行网站上做外汇买卖?  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  如何基于云服务器快速搭建网站及云盘系统?  制作网页的网站有哪些,电脑上怎么做网页?  网站制作公司,橙子建站是合法的吗?  ,网站推广常用方法?  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。