Несколько файлов cookie в CookieManager

Давайте подготовимся к хранению печенья:

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

Затем я ставлю вручную некоторые куки, скажем, PHPSESSID а также RANDOM

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 Действия, которые открывают веб-сайт того же домена, также устанавливают куки, тогда, когда я печатаю куки, как показано выше, это выглядит так:

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 ИЛИ перезаписать уже установленный?

2 ответа

Как в документах MDN о Set-Cookie Вы можете увидеть много разных видов значений cookie, cookie может быть установлен для конкретного Path

Имя-куки = куки-значение; Путь = путь-значение

И в CookieManager.setCookievoid setCookie (String url, String value), ссылка на Android говорит:

Устанавливает cookie для данного URL. Любой существующий файл cookie с тем же хостом, путем и именем будет заменен новым файлом cookie. Установленный файл cookie будет игнорироваться, если срок его действия истек.

По моему мнению, причина того, что у вас есть повторяющиеся записи, заключается в том, что значения cookie были в разных Path, Поэтому, если вы хотите перезаписать, убедитесь, что имя хоста совпадает.

  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. Дайте это попробовать

Другие вопросы по тегам