【问题标题】:share cookies between XMLHttpRequests and cordova plugin在 XMLHttpRequests 和 cordova 插件之间共享 cookie
【发布时间】:2016-04-13 18:11:16
【问题描述】:

我正在努力使用 crosswalkcordova 插件 javacode 让它们共享相同的 cookie。

在 javascript 中创建一个身份验证 cookie,并在几个 XMLHttpRequests 期间更新到我的 webservice

在 Java 中,我有一个 IntentServiceonHandleIntent 会被调用,例如在发生位置更新时。 在我的onHandleIntent 内部,我想使用相同的cookie 调用与上述javascript 部分相同的webservice。 为了检索我调用 new XWalkCookieManager().getCookie(url) 的 cookie,并使用它在 Java 中进行 HTTP-Call,包括该 cookie。

当应用程序完全关闭时(通过 TaskManager),我的 onHandleIntent 仍然被调用。但我不能打电话给getCookie(url),因为人行横道没有运行。 getCookie(url) 崩溃无法捕获 (ndk)。

我已经尝试在我的MainActivitys onStop 中缓存当前的 cookie,它可以在某些设备上运行。但在其他设备上,应用程序经常在没有适当停止行为的情况下关闭。所以这是非常脆弱的。

所以我的问题是:有没有办法在应用程序关闭时获取人行横道 cookie,或者拦截 javascript 完成的所有请求并缓存 cookie 以便在应用程序时准备好正确的 cookie关门了吗?

【问题讨论】:

  • 同样糟糕的问题。你找到解决办法了吗?

标签: android web-services cordova cookies intentservice


【解决方案1】:

既然有人问我是如何解决的,这是我的繁重解决方法,它包含 3 个部分。

  1. 每个请求/响应 我的 cordovaapp 正在使用 angular,并且我放置了一个 $http-interceptor 来拦截每个响应。每当检索到响应时,它都会调用我的本机插件并调用方法“updateLocalCookie”。在插件 Javacode 中,我将实际的 cookie 放入 SharedPreferences-String 中。
  2. 每当需要从插件/Java 代码调用时 从SharedPreferences获取当前的cookie,完全不要让crosswalk获取cookie。
  3. 每当检索到插件/Java 代码中的响应时 这部分也很重要。您通常还希望将检索到的 cookie 写回人行横道。但是XWalkCookieManager.setCookies 在应用程序处于终止状态时也是不可能的。 所以我扩展了MainActivity(在添加平台后使用cordova钩子)以包含一个BroadcastReciever,它将cookie写回人行横道。 响应回调会将新的 cookie 存储在 SharedPreferences 中并发送一个广播。如果应用程序正在运行,BroadcastReciever 存在并写入 cookie。如果应用程序被杀死,MainActivity 不会运行,因此该广播将被忽略。 最后一个重要的部分是,在每次应用启动时,还必须从 SharedPreferences 读取 cookie 并将其写入人行横道,因为您在应用停机期间错过了这些 cookie。

希望对您有所帮助,如果有不清楚的地方,请随时再次提问/评论,因为这是一个非常混乱的解决方法。

【讨论】:

    猜你喜欢
    • 2015-06-15
    • 2013-07-20
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    相关资源
    最近更新 更多