Проблема со значением cookie, не кодируемым для приложения Cordova Android с использованием Crosswalk
НАСТРОИТЬ
В настоящее время у меня есть Android-приложение Cordova, которое использует CrossWalk в качестве веб-просмотра вместо браузера по умолчанию Chromium. Само приложение обращается к AuthProvider во время входа в систему, а файлы cookie, которые передаются обратно от AuthProvider, сохраняются в CookieManager для Android.
Я подтвердил, что могу получать файлы cookie, специфичные для этого автора, по домену.
проблема
Для простых случаев, когда значение cookie не содержит знака "=", все работает отлично. Я могу обновить или даже лишить законной силы cookie. Тем не менее, я замечаю, что когда провайдер аутентификации возвращает куки-файл со значением "=" (например, Cookie string = "AuthCookie=a=b=c=d", где AuthCookie - имя куки-файла, а значение - "a=b=c=d". Когда это происходит, "a=b=c=d"является недопустимым значением cookie, когда оно не закодировано. В результате метод CookieManager (setCookie) не работает. Нет никакого способа обновить или даже лишить законной силы этот cookie.
Интересно то, что вы cookieManger даже не позволите вам установить cookie со значением "a = b = c = d". Проблема заключается в том, что я считаю, что значение cookie задается браузером, который интерпретирует файлы cookie из ответа от поставщика данных и обновляет хранилище данных. Однако я не думаю, что он когда-либо кодирует значение cookie.
ЦЕЛЬ
Реальная цель заключается в том, чтобы мне нужно было сделать недействительными определенные куки, которые хранятся через браузер AuthProvider.
Функция, предоставляемая для cookieManager
setCookie(<домен>,
Проблема в том, что сама функция принимает строку cookie, которая содержит имя и значение cookie. Я только хочу, чтобы значение cookie было закодировано. Единственная проблема заключается в том, что я не так, как AuthProvider устанавливает куки в магазине куки.
Нужно ли переопределить метод set cookieManager? Разобрать все куки на основе ";" затем проанализировать все файлы cookie для первого знака "=", а затем закодировать все с правой стороны?
Я также не знаю, вызывал ли cookieManager:setCookie() браузер, в котором хранится ответ провайдеров аутентификации? Я не верю, что это так, потому что setCookie(домен,"auth=a=b=c=d") не будет работать. По крайней мере, с XWalkCookieManager
или есть другой способ обновить или аннулировать строку cookie, которая называется "auth=a=b=c=d". Когда я пытаюсь установить "setCookie(domain, "auth=super"), исключение не выдается. Затем я вызываю getCookie(domain), и он возвращает null. В XWalkCookieManager генерируется исключение UnsupportedOperationException, и в результате возвращается null. I У меня нет источника, поэтому я не могу глубже понять, почему выбрасывается исключение unsupportedOperationException.
Любой совет о том, как решить эту проблему или обходной путь? Спасибо Дерек
1 ответ
Я разобрался в проблеме. Он имеет дело с версией webwview для плагинов cordova, которую я использовал.
Разбитая версия: cordova-plugin-crosswalk-webview 1.8.0 "Crosswalk WebView Engine" Рабочая версия: cordova-plugin-crosswalk-webview 2.2.0 "Crosswalk WebView Engine"
На самом деле, это решает только проблему невозможности установить вложенные значения в пределах значения cookie.
Иногда с помощью файлов cookie провайдера аутентификации вы все равно не сможете точно аннулировать файлы cookie. Не уверен, что решение для этого.