热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

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

这篇文章主要给大家介绍了关于OkHttp3中默认不保持Cookie的解决方法,文中先对OKhttp3中的cookies进行了简单的介绍,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

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 &#63; 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 &#63; COOKIEs : new ArrayList();
     }
    }).build();

总结

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


推荐阅读
author-avatar
书友48919914
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有