OkHttp3中默认不保持Cookie的解决方法
作者:云之外 时间:2021-10-25 15:20:50
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();
来源:https://www.jianshu.com/p/ddc0af82ed07
标签:okhttp3,cookie,不保持
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Android中banner的使用步骤
2023-07-04 17:47:23
Spring Cloud Gateway网关XSS过滤方式
2021-08-07 13:16:53
JAVA实现长连接(含心跳检测Demo)
2023-08-05 09:51:13
Java 通过反射给实体类赋值操作
2023-11-26 10:11:41
Spring AOP实现接口请求记录到数据库的示例代码
2023-08-15 19:14:05
![](https://img.aspxhome.com/file/2023/4/58064_0s.png)
Java IO流相关知识代码解析
2023-08-05 05:48:04
es(elasticsearch)整合SpringCloud(SpringBoot)搭建教程详解
2023-12-06 07:34:14
![](https://img.aspxhome.com/file/2023/3/69283_0s.jpg)
Mybatis环境搭建及文件配置过程解析
2021-07-04 22:37:03
![](https://img.aspxhome.com/file/2023/4/75504_0s.png)
Android实现屏幕旋转四个方向准确监听
2022-06-07 08:57:32
Android中外接键盘的检测的实现
2023-07-27 21:15:13
Java基础之容器Vector详解
2023-11-25 13:10:07
WinFrom中label背景透明的实现方法
2023-05-08 13:05:40
SpringBoot 多Profile使用与切换方式
2022-04-13 14:58:27
![](https://img.aspxhome.com/file/2023/1/78951_0s.png)
Java与C++分别用递归实现汉诺塔详解
2021-10-23 01:28:59
![](https://img.aspxhome.com/file/2023/7/62237_0s.png)
深入探索Java常量池
2022-12-28 00:55:53
![](https://img.aspxhome.com/file/2023/0/66470_0s.jpg)
swing分割窗口控件JSplitPane使用方法详解
2021-07-28 14:15:20
Java @Deprecated注解的作用及传递性
2023-08-11 12:55:05
![](https://img.aspxhome.com/file/2023/7/58097_0s.png)
C# 屏蔽关键字的实现方法
2023-10-10 15:15:50
![](https://img.aspxhome.com/file/2023/7/91387_0s.png)
Spring createBeanInstance实例化Bean
2023-06-17 17:26:27
JavaFX实现UI美观效果代码实例
2021-08-27 21:02:15
![](https://img.aspxhome.com/file/2023/6/62206_0s.jpg)