Android WebView/CookieSyncManager中会话cookie的生命周期

gnm*_*itt 8 session-cookies android-webview activity-lifecycle

我有一个Android应用程序,它通过WebView和HttpClient向我的Web服务器发出请求.我使用CookieSyncManager在两者之间同步cookie.到现在为止还挺好.

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

if ( appHasBeenIdleFor30Minutes() ) {
     CookieManager cookieManager = CookieManager.getInstance();
     cookieManager.removeSessionCookie();
     CookieSyncManager.getInstance().sync();
}
Run Code Online (Sandbox Code Playgroud)

这会正确重置从用户上一个会话中设置的任何会话cookie.我的问题是:这种行为是否会定期发生?这个问题(android webview或浏览器不会在设备重启时删除会话cookie)似乎表明它没有.当我通过服务使用cookie-sync'd HttpClient时,会显示会话cookie未被清除,从而导致奇怪的服务器端行为.

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

gnm*_*itt 14

我直接收到了Google工程师的回复,他确认了我的怀疑:

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

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

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

  • 如果你能提供这个答案的链接,那就太好了. (6认同)