我在我的应用程序中调用onCreate中的CookieManager.getInstance().removeAllCookie().
我遇到了一个奇怪的问题,我发现在GET请求中传递了意外的cookie值.事实上,cookie值是一个非常非常古老的价值.
以下是我为测试执行的步骤:
我第一次安装应用程序时,cookie行为按照我的预期工作.我卸载了应用程序,然后重新安装它,并且cookie行为再次按预期工作.我这样做了几次,事情很好,花花公子.
然后,突然,在第N次安装时,第2步没有通过.第一个GET请求不干净.事实上,它带有一个在应用程序首次安装时设置的值.
我无法可靠地重现这个问题,但我确实经常看到它.并不是说安装时的第一个GET请求是从之前的安装中发送一个cookie值 - 该值来自之前的三个或四个安装,然后是卸载.
我怎么可能看到这个?我怎样才能真正删除所有应用程序的cookie?
这是一个黑暗中的镜头,但是第一次安装的cookie可能是持久存储,而重新安装的cookie则缓存在RAM中.也许删除所有cookie的操作由于某种原因没有被同步到持久存储,所以它在重新安装之间保持旧值.
引用文档CookieSyncManager(强调我的):
CookieSyncManager用于在RAM和永久存储之间同步浏览器cookie存储.为了获得最佳性能,浏览器cookie保存在RAM中.一个单独的线程在由计时器驱动之间保存cookie .
...
同步间隔为5分钟,因此您仍然希望手动强制同步,例如在onPageFinished(WebView,String)中.请注意,即使sync()也是异步发生的,因此请不要在活动关闭时执行此操作.
这有力地表明,在卸载应用程序时,可能(在我的测试中,我假设有时间隔不到5分钟)它还没有同步,所以第一次安装的旧值仍然在此时持久存储.如果没有通过5分钟的间隔,我也没有理由认为在卸载过程中会发生同步.
这留下了一个问题:为什么有时会发送一些cookie,即使你把它们清除了onCreate?事实证明它removeAllCookie 也是异步的 - 有时它会在你发出第一个请求之前完成,有时候它不会完成,而在后一种情况下它会发送仍然有效的值:第一次安装的那些,仍然是在持久存储中.
(请注意,我仍然在学习Android开发,我的一些假设可能是错误的 - 关于如何管理cookie以及在另一个运行生命周期中在一个状态下进行的异步调用是否仍然未完成;但这种解释与您描述的行为非常一致)
| 归档时间: |
|
| 查看次数: |
8974 次 |
| 最近记录: |