【发布时间】:2020-09-14 15:56:10
【问题描述】:
Android 应用程序的所有 WebView 共享(以及其他数据)他们存储的 cookie 集。我想分离 cookie 存储,即每个 WebView 都应该有自己的一组 cookie。
因此,我正在寻找一种方法来从 WebView 中检索所有 cookie,包括元信息(到期日期、标志等),分别保存它们并在需要时再次设置它们。 CookieManager 有一个方法 getCookie(),然而,它只返回当前有效 cookie 的值和名称,没有任何元信息(如 here 所讨论的)。
Android WebView 将 cookie 存储在磁盘上的 SQLite3 数据库中。显然,获得完整 cookie 信息的唯一方法是查看磁盘上的 cookie 存储。可以解析 SQLite3 数据库并使用CookieManager 的setCookie(),但所有加密值都会丢失。所以我的想法是复制整个数据库文件并根据需要交换(即重命名)文件。
这种方法的潜在问题:
- 同步问题:我无权访问系统可能用于访问 cookie 文件的任何锁。
- 即使我尝试重命名文件而忽略第一个问题,也只会在应用程序启动时读取数据库。之后,所有 cookie(从磁盘读取的旧 cookie 和运行时添加的新 cookie)都保存在 RAM 中。我需要强制从磁盘重新加载,但 API 只提供另一个方向的同步,即从 RAM 到磁盘。
在哪里可以找到最初从磁盘加载 cookie 的代码? Android SDK 的CookieManager.java 是一个抽象类,我在哪里可以找到实际的实现?它可能对这个问题有宝贵的见解。
【问题讨论】:
标签: android cookies webview android-webview