栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

OkHttp3中默认不保持Cookie的解决方法

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

OkHttp3中默认不保持Cookie的解决方法

OKhttp3中的cookies

OkHttpClient client = new OkHttpClient().newBuilder().cookieJar(new cookieJar() {

   private final HashMap> cookieStore = new HashMap<>();

   @Override
   public void saveFromResponse(HttpUrl url, List cookies) {
    cookieStore.put(url.host(), cookies);
   }

   @Override
   public List loadForRequest(HttpUrl url) {
    List cookies = cookieStore.get(url.host());
    return cookies != null ? cookies : new ArrayList();
   }
  }).build();

主要就是实现cookieJar接口,在OkHttpClient构建的时候。

OkHttp3 默认不保持 cookie 的解决方案

OkHttp3 声明的 OkHttpClient 默认不保存 cookie,不发送 cookie。在实际开发中会丢失 Session ID 造成服务器无法判断当前用户的登录状态。查阅多方资料后给出解决办法。

三点概念:

首次与服务器建立连接时,服务器生成 SessionID 标记当前连接会话。(HTTP 是无连接协议)
客户端 request 时,将 带有 SessionID 的 cookie 发送至服务器,以此作为会话标记。
在实际使用 OkHttp3 时,通常一个 Application 只使用 一个 OkHttpClient 实例进行连接。

解决方案:

构建 cookieJar 对象,并重写 saveFromResponse 和 loadFromRequest 方法。

使用构建了 cookieJar 的 OkHttpClient 实例收发 Http 连接。

本程序中使用了单例模式构造 OkHttpClient 实例,cookie 持久化代码如下:

mOkHttpClient = new OkHttpClient.Builder()
    .cookieJar(new cookieJar() {
     private final HashMap> cookieStore = new HashMap<>();

     @Override
     public void saveFromResponse(HttpUrl url, List cookies) {
      cookieStore.put(url.host(), cookies);
     }
     @Override
     public List loadForRequest(HttpUrl url) {
      List cookies = cookieStore.get(url.host());
      return cookies != null ? cookies : new ArrayList();
     }
    }).build();

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对考高分网的支持。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/156356.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号