gpt4 book ai didi

android - CookieManager.getInstance().removeAllCookie();不会删除所有 cookie

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:30:39 25 4
gpt4 key购买 nike

我在我的应用程序的 onCreate 中调用 CookieManager.getInstance().removeAllCookie()。

我遇到了一个奇怪的问题,我发现在 GET 请求中传递了意外的 cookie 值。事实上,cookie 值是一个非常非常古老的值。

以下是我为测试执行的步骤:

  1. 安装应用
  2. 在应用启动时发出 GET 请求。请求应该是干净的:不应发送任何 cookie。
  3. GET 请求以 Set-Cookie 响应。该值基于请求时间,因此该值在任何两个请求上相同的可能性非常小。
  4. 发出另一个 GET 请求。请求应从第 3 步发送 cookie 值。

我第一次安装该应用程序时,cookie 行为如我预期的那样工作。我卸载了该应用程序,然后重新安装它,cookie 行为再次按预期工作。我这样做了几次,一切都很好。

然后,突然间,在第 N 次安装时,第 2 步没有通过。第一个 GET 请求不干净。事实上,它带有一个在第一次安装应用程序时设置的值。

我无法可靠地重现这个问题,但我确实经常看到它。这并不是说安装时的第一个 GET 请求是从紧接在前的安装中发送一个 cookie 值——该值来自三四次之前的安装,这些安装之后都是卸载

我怎么可能看到这个?我怎样才能真正删除应用程序的所有 cookie?

最佳答案

这是在黑暗中拍摄的,但您第一次安装的 cookie 可能在永久存储中,而重新安装的 cookie 缓存在 RAM 中。也许出于某种原因,删除所有 cookie 的操作没有同步到持久存储,因此它在重新安装之间保留了旧值。

引用 CookieSyncManager 的文档(强调我的):

The CookieSyncManager is used to synchronize the browser cookie store between RAM and permanent storage. To get the best performance, browser cookies are saved in RAM. A separate thread saves the cookies between, driven by a timer.

...

The sync interval is 5 minutes, so you will want to force syncs manually anyway, for instance in onPageFinished(WebView, String). Note that even sync() happens asynchronously, so don't do it just as your activity is shutting down.

这强烈表明也许(在您的测试中,我假设有时间隔少于 5 分钟)当应用程序被卸载时它还没有同步,所以第一次安装的旧值是此时仍在持久存储中。我也没有理由假设如果 5 分钟间隔没有过去,卸载过程中会发生同步。

这留下了一个问题:为什么有时会发送一些 cookie,即使您在 onCreate 中清除了它们?结果是 removeAllCookie is also asynchronous - 有时它会在您发出第一个请求之前完成,有时不会,在后一种情况下,它会发送仍处于 Activity 状态的值:您第一次安装时仍在持久存储中的值。

(请注意,我仍在学习 Android 开发,我的一些假设可能是错误的 - 关于 cookie 的管理方式以及在 activity's lifecycle 中的一个状态下进行的异步调用是否可能仍未完成当另一个运行时;但这种解释与您描述的行为非常一致)

关于android - CookieManager.getInstance().removeAllCookie();不会删除所有 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13896993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com