设置
目前,我有一个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 。
有关如何解决此问题或解决方法的任何建议?谢谢,德里克