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