Android使用token维持登陆状态的方法
程序员文章站
2024-02-13 18:23:28
什么是token
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维持登陆状态的方法,希望对大家有所帮助