OkHttp3中默认不保持Cookie怎么办-创新互联

这篇文章主要介绍了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();

感谢你能够认真阅读完这篇文章,希望小编分享的“OkHttp3中默认不保持Cookie怎么办”这篇文章对大家有帮助,同时也希望大家多多支持创新互联,关注创新互联行业资讯频道,更多相关知识等着你来学习!


网页题目:OkHttp3中默认不保持Cookie怎么办-创新互联
转载来于:http://myzitong.com/article/gdijg.html