1

设置

目前,我有一个cordova android 应用程序,它使用crosswalk 作为webview 而不是默认的chromium 浏览器。应用程序本身在登录期间访问 AuthProvider,并且从 AuthProvider 传回的 cookie 存储在 Android 的 CookieManager 中。

我已经验证我能够通过域检索特定于该 authprovider 的 Cookie。

问题

对于简单的情况,当 cookie 的值不包含“=”符号时,一切正常。我可以更新甚至使 cookie 无效。但是,我注意到当身份验证提供程序返回一个 cookie 时,其中的值带有“=”(例如 Cookie 字符串 =“AuthCookie=a=b=c=d”,其中 AuthCookie 是 cookie 名称,值为“ a=b=c=d”。出现这种情况时,“a=b=c=d”在未编码时是一个无效的cookie值,结果CookieManager的方法(setCookie)不起作用。没有办法更新甚至使该 cookie 无效。

有趣的是,cookieManger 甚至不允许您设置值为“a=b=c=d”的 cookie。问题是我相信 cookie 值是由浏览器设置的,它从 authprovider 的响应中解释 cookie 并更新数据存储。但是,我认为它从未对 cookie 值进行编码。

目标

真正的目标是我需要能够使通过 AuthProvider 浏览器存储的特定 cookie 无效。

为 cookieManager 提供的函数

setCookie(<域>, <cookiestring>);

函数本身采用包含 cookie 名称和值的 cookie 字符串的问题。我只希望对 cookie 值进行编码。唯一的问题是我不是 AuthProvider 如何在 cookie 存储中设置 cookie。

我需要重写 cookieManager 设置方法吗?基于“;”解析所有cookies 然后解析第一个“=”符号的所有cookie,然后对右侧的所有内容进行编码?

我也不知道浏览器调用的 cookieManager:setCookie() 是否存储身份验证提供程序响应?我不相信这种情况,因为 setCookie(domain,"auth=a=b=c=d") 不起作用。至少使用 XWalkCookieManager

或者是否有另一种方法来更新或使“auth=a=b=c=d”的cookiestring无效。当我尝试 "setCookie(domain, "auth=super") 时,没有抛出异常。然后我将调用 getCookie(domain),它会返回 null。在 XWalkCookieManager 中抛出 UnsupportedOperationException,结果返回 null。我没有来源,所以我无法更深入地了解为什么抛出 unsupportedOperationException 。

有关如何解决此问题或解决方法的任何建议?谢谢,德里克

4

1 回答 1

0

我弄清楚了这个问题。它必须处理我正在使用的科尔多瓦插件人行横道 webview 版本。

损坏版本:cordova-plugin-crosswalk-webview 1.8.0 “Crosswalk WebView 引擎” 工作版本:cordova-plugin-crosswalk-webview 2.2.0 “Crosswalk WebView 引擎”

实际上,这仅解决了无法在 cookie 值中设置嵌套值的问题。

有时使用身份验证提供商的 cookie,您仍然无法准确地使 cookie 无效。不知道解决方案是什么。

于 2017-01-05T10:23:48.237 回答