作用
-
管理 Cookie:
CookieJar负责存储服务器发送的 Cookie,并在后续的请求中将 Cookie 添加到请求头中。 遵循 HTTP 的 Cookie 管理机制,包括域名、路径和过期时间等规则。 -
提供灵活性:
开发者可以选择将 Cookie 保存在内存中、持久化到磁盘中,或者自定义存储机制。 可用于实现浏览器式的会话管理或持久化的登录状态。
-
支持自动化处理:
自动将服务器返回的 Cookie 保存并附加到符合条件的请求中,避免手动管理。
CookieJar 源码
CookieJar 是一个接口,包含以下两个方法:
public interface CookieJar {
void saveFromResponse(HttpUrl url, List<Cookie> cookies);
List<Cookie> loadForRequest(HttpUrl url);
}
方法详解
-
saveFromResponse(HttpUrl url, List<Cookie> cookies):-
在接收到服务器响应时调用,用于存储从响应中提取的 Cookie。
-
参数:
url: 发起请求的 URL。cookies: 从响应头中解析出的 Cookie 列表。
-
-
loadForRequest(HttpUrl url):-
在发起请求时调用,用于加载与请求 URL 匹配的 Cookie。
-
参数:
url: 当前请求的 URL。
-
返回值:
- 返回与请求 URL 相关的 Cookie 列表,这些 Cookie 会被添加到请求头中。
-
-
默认值:CookieJar.NO_COOKIES- 一个空实现,表示不处理任何 Cookie。
- 默认情况下,OkHttp 不会存储或发送 Cookie。
高级用法:持久化 Cookie
如果需要将 Cookie 保存到磁盘中(如实现长期会话),可以结合数据库或文件系统来实现。例如:
public class PersistentCookieJar implements CookieJar {
private final CookieStore cookieStore;
public PersistentCookieJar(CookieStore cookieStore) {
this.cookieStore = cookieStore;
}
@Override
public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
cookieStore.add(url, cookies);
}
@Override
public List<Cookie> loadForRequest(HttpUrl url) {
return cookieStore.get(url);
}
}