5

让我们为 cookie 存储做准备:

CookieSyncManager.createInstance(getApplicationContext());
CookieSyncManager.getInstance().startSync();
CookieManager.getInstance().setAcceptCookie(true);

然后我手动放置一些cookies,让我们PHPSESSIDRANDOM

CookieManager.getInstance().setCookie("domain.com", "PHPSESSID="+phpSession);
CookieManager.getInstance().setCookie("domain.com", "RANDOM="+random);

让我们检查它是否使用:

CookieManager.getInstance().getCookie("domain.com");

并得到

PHPSESSID=dba4ff392agd39b5951d10a91a0a7b56; RANDOM=266284790:1466147978:c91d0896bac59e0b

一切看起来都不错,但是当我在可能的应用程序中导航到一个WebView活动时,这些活动正在打开同一个域网站也设置 cookie,然后当我像上面那样打印 cookie 时,它​​看起来像这样:

PHPSESSID=dba4ff392agd39b5951d10a91a0a7b56;
RANDOM=266284790:1466147978:c91d0896bac59e0b;
PHPSESSID=9ecb5156cf8fc3190fbc69fd13393243;
RANDOM=265078219%3A1463147975%3Ad0448d163e9b2123

重复的条目...之后我再次手动设置例如 RANDOM setCookie

PHPSESSID=dba4ff392agd39b5951d10a91a0a7b56; 
RANDOM=111111111:2222222222:33333336bac59e0b;
PHPSESSID=9ecb5156cf8fc3190fbc69fd13393243; 
RANDOM=265078219%3A1463147975%3Ad0448d163e9b2123

设置的值WebView不会被覆盖,只有我的“手动”输入......如何强制WebView使用我之前设置的cookie或覆盖已经设置?

4

2 回答 2

3

正如在MDN 文档中关于Set-Cookie您可以看到许多不同类型的 cookie 值一样,可以将 cookie 设置为特定的Path

cookie 名称=cookie 值;路径=路径值

在 中CookieManager.setCookie void setCookie (String url, String value)android 参考资料说:

为给定的 URL 设置一个 cookie。任何具有相同主机路径名称的现有 cookie都将被新 cookie 替换。如果设置的 cookie 过期,它将被忽略。

在我看来,您有重复条目的原因是因为 cookie 值在不同的Path. 因此,如果要覆盖,应确保主机路径名相同。

于 2016-11-03T15:46:59.800 回答
0
  private void setCookieManager(String auth_token) {
    CookieSyncManager manager = CookieSyncManager.createInstance(this);
    CookieManager cookieManager = CookieManager.getInstance();
    cookieManager.setAcceptCookie(true);
    cookieManager.removeSessionCookie();
    cookieManager.setCookie(auth_token);

    manager.sync();
}

我认为您只是没有正确设置 cookie 管理器。试试这个

于 2016-05-14T11:08:12.323 回答