Android开发中 如何保持登录状态

之前多iOS开发没遇到过session保持的问题,第一次做安卓项目,组长说和iOS一样,瞬间蒙圈啦,session保持是什么。。。

session:通俗点说就是网络请求中的会话创建保持的一种服务端机制。

cookie:服务端给每个session分配一个唯一的JSESSIONID,通过cookie给客户端;

session和cookie都是为了用来保存状态信息的。一个用于服务端一个用于客户端;

解决:

1.在客户端发送登录请求后,将response中的cookie取出保存在本地全局变量;

call.enqueue(new Callback<MyDataModel>() {
    @Override
    public void onResponse(Call<MyDataModel> call, Response<MyDataModel> response) {

        System.out.println("_____________成功" + response.body().getData());

        SessionUtilTools.getSession(response.headers());// 获取响应中的cookie
        SharedData.isFirst = true;
        Intent intent = new Intent();
        intent.setClass(MainActivity.this,TabBarActivity.class);
        startActivity(intent);
        finish();
    }

    @Override
    public void onFailure(Call<MyDataModel> call, Throwable t) {
        System.out.println("___________1失败" + t);
    }
});

session 工具类(用于取cookie)

public class SessionUtilTools {
    public static void getSession(Headers headers){

        List<String> cookies = headers.values("Set-Cookie");
        String session = cookies.get(0);
        SharedData.sessionCookie = session.substring(0,session.indexOf(";"));// 取出cookie 保存在全局变量中
    }
}

2.每次请求的时候将cookie带上 

public class TokenInterceptor implements Interceptor{  //自定义拦截器
    @Override
    public Response intercept(Chain chain) throws IOException {

           Request newRequest = chain.request()
                   .newBuilder()
                   .addHeader("cookie",SharedData.sessionCookie)//在请求中添加登录后获取的cookie
                   .build();

            Response response =chain.proceed(newRequest);

        return response;
    }
}
//网络请求框架
private static OkHttpClient getClient(){
    if (client==null)//将自定义的拦截器添加
        client = new OkHttpClient().newBuilder().addInterceptor(new TokenInterceptor()).build();
    return client;
}

这样就解决了登录保持的问题;

 

转载于:https://my.oschina.net/u/2532095/blog/874851

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值