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

 更新时间:2018年04月20日 11:39:53   转载 作者:云之外  
这篇文章主要给大家介绍了关于OkHttp3中默认不保持Cookie的解决方法,文中先对OKhttp3中的cookies进行了简单的介绍,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

OKhttp3中的cookies

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

   private final HashMap<String, List<Cookie>> cookieStore = new HashMap<>();

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

   @Override
   public List<Cookie> loadForRequest(HttpUrl url) {
    List<Cookie> cookies = cookieStore.get(url.host());
    return cookies != null ? cookies : new ArrayList<Cookie>();
   }
  }).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<String, List<Cookie>> cookieStore = new HashMap<>();

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

总结

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

相关文章

  • android TextView多行文本(超过3行)使用ellipsize属性无效问题的解决方法

    android TextView多行文本(超过3行)使用ellipsize属性无效问题的

    这篇文章介绍了android TextView多行文本(超过3行)使用ellipsize属性无效问题的解决方法,有需要的朋友可以参考一下
    2013-09-09
  • Android判断SD卡是否已经挂载的方法

    Android判断SD卡是否已经挂载的方法

    这篇文章主要介绍了Android判断SD卡是否已经挂载的方法,涉及Android监听方法BroadcastReceiver的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • Android自定义控件的步骤

    Android自定义控件的步骤

    今天小编就为大家分享一篇关于Android自定义控件的步骤,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • Android仿微信拍摄短视频

    Android仿微信拍摄短视频

    本文主要对Android仿微信拍摄短视频的实现方法进行介绍,其功能设置为类似于微信,点击开始拍摄,设置最长拍摄时间。具有很好的参考价值,需要的朋友一起来看下吧
    2016-12-12
  • 关于Android中ListView嵌套GridView的问题

    关于Android中ListView嵌套GridView的问题

    在Android开发的过程中可能需要用到listview嵌套gridview的场景,但是在嵌套过程中也许会遇到问题,我们下面一起来看看是什么问题以及如何解决。
    2016-08-08
  • Android实现本地图片选择及预览缩放效果

    Android实现本地图片选择及预览缩放效果

    这篇文章主要为大家详细介绍了Android仿春雨医生,实现本地图片选择及预览缩放效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Android 中Handler引起的内存泄露

    Android 中Handler引起的内存泄露

    本文主要介绍Android中Handler引起的内存泄露,在实际开发中经常会遇到使用Handler来写异步操作的功能,如果引起内存泄漏,看看怎么解决
    2016-08-08
  • Android编程之include文件的使用方法

    Android编程之include文件的使用方法

    这篇文章主要介绍了Android编程之include文件的使用方法,实例分析了Android使用include引入文件的技巧,有助于增加代码的重用性,提高程序设计效率,需要的朋友可以参考下
    2016-01-01
  • Android ProgressDialog进度条使用详解

    Android ProgressDialog进度条使用详解

    这篇文章主要对Android开发之ProgressDialog读取文件进度进行解析,感兴趣的朋友可以参考一下
    2016-02-02
  • Android编程实现自定义toast示例

    Android编程实现自定义toast示例

    这篇文章主要介绍了Android编程实现自定义toast,结合简单实例形式分析了自定义布局toast核心实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2017-01-01

最新评论