9

我有一个 Android 应用程序,它通过 WebView 和 HttpClient 向我的网络服务器发出请求。我使用 CookieSyncManager 在两者之间同步 cookie。到目前为止,一切都很好。

当我的应用程序启动时(在 onResume() 内部),我运行一段类似于以下的逻辑:

if ( appHasBeenIdleFor30Minutes() ) {
     CookieManager cookieManager = CookieManager.getInstance();
     cookieManager.removeSessionCookie();
     CookieSyncManager.getInstance().sync();
}

这会正确重置从用户上一个会话设置的任何会话 cookie。我的问题是:这种行为会定期发生吗?这个问题(android webview or browser not deleted session cookie on device reboot)似乎表明它没有。当我通过服务使用 cookie 同步的 HttpClient 时,似乎没有清除会话 cookie,从而导致奇怪的服务器端行为。

我一直无法在 WebView/CookieSyncManager 中找到有关会话 cookie 生命周期(过期时间 = 0)的具体文档 - 还有其他人有更多的运气吗?

4

1 回答 1

17

我直接收到了一位 Google 工程师的回复,证实了我的怀疑:

你是对的,会话 cookie 不会在 WebView 的生命周期中自动过期。如果您发现此问题,您可以随时清除所有 cookie 或使用空值明确覆盖会话 cookie。

您建议的代码看起来是一个很好的解决方法,请注意使用 CookieSyncManager 的 cookie 同步不是同步的 - startSync()、stopSync() 和 sync() 命令在后台线程中异步执行。

TL;DR - WebView 关闭时会话 cookie 不会过期,您必须自己管理。

于 2013-06-25T13:45:38.917 回答