首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CookieManager -如何管理异步方法- removeSessionCookies

CookieManager -如何管理异步方法- removeSessionCookies
EN

Stack Overflow用户
提问于 2013-12-02 21:48:07
回答 2查看 2.2K关注 0票数 2

我需要集成一个具有本机登录屏幕的应用程序,并将其与运行在webview (混合应用程序)中的应用程序的其余部分结合起来。这听起来有点普通,但我在将会话数据(Cookie)从本地代码传输到and视图时遇到了问题,我认为这与CookieManager的异步行为有关。

有时,在某些设备上,cookies要么被删除,要么不应用。据我所读,这可能是因为removeSessionCookie、setCookie和sync在它们自己的线程中异步运行。在其他编程语言的Java中,我并不真正理解这一点,因为似乎没有任何钩子可以知道任务何时完成-- EG回调、事件、asyc/候候等。

因此,问题是,您如何知道何时在Android/Java中完成异步任务?我遇到了同步块语法,但它看起来不像是要等待removeSessionCookie这样的东西才能完成。

我的代码看起来有点像这样:

代码语言:javascript
复制
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.removeSessionCookie(); // problem
CookieSyncManager.getInstance().sync(); // maybe problem

List<Cookie> cookies = httpClient.getCookieStore().getCookies();
for (int i = 0; i < cookies.size(); i++) {
    Cookie cookie = cookies.get(i);
    String cookieString = cookie.getName() + "=" + cookie.getValue();
    cookieManager.setCookie(url, cookieString);
}
CookieSyncManager.getInstance().sync();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-04 12:33:13

不幸的是,CookieManager API的设计使得这很困难/不可能。CookieSyncManager在这里根本不相关;它只处理内存中的cookie数据库和存储在磁盘上的数据库之间的同步。在它上调用sync()没有任何区别;WebViewCookieManager都已经共享了内存中的数据库,并且在实际执行时会立即看到对方的更改。

通常,异步方法会提供某种回调或等待它完成的方式,但removeSessionCookie()就是没有。实际上,在某些版本的代码中实现了这种方法--从蜂巢到JB--但是它不是一个公共WebView方法,您必须通过反射访问它,而且它不能在KK和上面的新WebView上工作。如果你真的想叫它,它是void waitForCookieOperationsToComplete(),但我不建议它。

你为什么一开始就打电话给removeSessionCookie()?最简单的修复方法是不使用它;其余的CookieManager API的行为与您预期的一样。您也不需要显式地调用CookieSyncManager.sync()。你是有问题导致你添加这些电话,还是你从某个地方复制它们?

如果您支持较早的操作系统版本,这就更加复杂了;从Cup蛋糕到姜饼,CookieManager使用的网络堆栈是不同的,API的行为也不同,因此这里实际上有三个版本要针对:直到姜饼,蜂窝通过Jellybean,然后是KitKat和后来的版本。

票数 4
EN

Stack Overflow用户

发布于 2014-04-03 16:13:49

创建您自己的java.net.CookieManager实现,它将所有请求转发到WebViews的webkit android.webkit.CookieManager。这意味着不需要同步,HttpURLConnection使用与WebViews相同的cookie存储。

Two way sync for cookies between HttpURLConnection (java.net.CookieManager) and WebView (android.webkit.CookieManager)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20338573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档