OkHttp3中默认不保持Cookie的解决方法
2018-04-20 11:39
756 查看
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();
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
相关文章推荐
- 按照网上方法js删除指定cookie,却怎么也删除不了,解决如下
- eclipse中默认js编辑器非常慢,尤其在拷贝粘贴代码时的解决方法
- debian中默认不存在sudo命令解决方法
- 探讨:sql插入空,默认1900-01-01 00:00:00.000的解决方法详解
- [转]extjs grid的Ext.grid.CheckboxSelectionModel默认选中解决方法
- Python默认编码错误SyntaxError: Non-ASCII character '\xe5'之解决方法
- 在 ServiceModel 客户端配置部分中,找不到引用协定“XX”的默认终结点元素的解决方法
- mfc 默认情况下 按下 enter esc 退出对话框 解决方法
- 关于Cookie跨域操作遇到的问题及解决方法
- C# .net中cookie值为中文时的乱码解决方法
- IIS6 中"ASP 0201 错误 无效的默认脚本语言" 的解决方法
- 对于默认字体最小为12px解决方法
- C# .net中cookie值为中文时的乱码解决方法
- Python默认编码错误SyntaxError: Non-ASCII character '\xe5'之解决方法
- jquery 删除cookie失效的解决方法
- Dedeeims英文版默认入口是中文和做英文单语出现错误提示的解决方法
- IE下iframe第三方网页跨域不能写cookie问题的解决方法
- JS 无法清除Cookie的解决方法
- 解决在excel中数字位数大于11位,都会默认以科学技术法出现的方法
- C# 文件上传 默认最大为4M的解决方法