2016-05-13 2 views
3

Позволяет подготовить для печенья хранения:Несколько печенья в 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 

дублированные записи ... когда после этого я вручную снова устанавливаю, например, СЛУЧАЙНЫЕ с setCookie:

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

значения, установленные WebView не переписываются, только мой «вручную» поступил ... как заставить WebView использовать мой предыдущий набор печенья или перезаписать уже установлен?

+0

Вы нашли причину такого поведения? –

+0

Я закончил с проверкой (сначала), что этот файл cookie существует, если нет, то я открываю 'WebView' (созданный« динамически »в' Activity' с помощью 'new WebView (this)', size 1x1) с URL-адресом , который предназначен только для установки файла cookie. после этого внутри приложения я использую этот файл cookie для запросов webapi. не очень хорошо исправлено ИМХО, но я не нашел лучшего решения:/ – snachmsm

ответ

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 должным образом. Дайте это попробовать

+0

Я в настоящее время даю это попробовать, как описано выше ... Я не хочу 'removeSessionCookie();', он должен храниться, и я 'm syncing ('manager.sync();') после каждой ручной вставки и в 'onPause' в действиях с' WebView' – snachmsm

2

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

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

И в CookieManager.setCookievoid setCookie (String url, String value), то android reference говорит:

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

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

Смежные вопросы