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();
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。