OkHttp3中默认不保持Cookie的解决方法
OKhttp3中的cookies
OkHttpClientclient=newOkHttpClient().newBuilder().cookieJar(newCookieJar(){ privatefinalHashMap>cookieStore=newHashMap<>(); @Override publicvoidsaveFromResponse(HttpUrlurl,List cookies){ cookieStore.put(url.host(),cookies); } @Override publicList loadForRequest(HttpUrlurl){ List cookies=cookieStore.get(url.host()); returncookies!=null?cookies:newArrayList (); } }).build();
主要就是实现CookieJar接口,在OkHttpClient构建的时候。
OkHttp3默认不保持Cookie的解决方案
OkHttp3声明的OkHttpClient默认不保存Cookie,不发送Cookie。在实际开发中会丢失SessionID造成服务器无法判断当前用户的登录状态。查阅多方资料后给出解决办法。
三点概念:
首次与服务器建立连接时,服务器生成SessionID标记当前连接会话。(HTTP是无连接协议)
客户端request时,将带有SessionID的Cookie发送至服务器,以此作为会话标记。
在实际使用OkHttp3时,通常一个Application只使用一个OkHttpClient实例进行连接。
解决方案:
构建CookieJar对象,并重写saveFromResponse和loadFromRequest方法。
使用构建了CookieJar的OkHttpClient实例收发Http连接。
本程序中使用了单例模式构造OkHttpClient实例,Cookie持久化代码如下:
mOkHttpClient=newOkHttpClient.Builder() .cookieJar(newCookieJar(){ privatefinalHashMap>cookieStore=newHashMap<>(); @Override publicvoidsaveFromResponse(HttpUrlurl,List cookies){ cookieStore.put(url.host(),cookies); } @Override publicList loadForRequest(HttpUrlurl){ List cookies=cookieStore.get(url.host()); returncookies!=null?cookies:newArrayList (); } }).build();
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。