【问题标题】:Secure cookies are lost when the Cordova iOS App is closed关闭 Cordova iOS 应用程序时,安全 cookie 会丢失
【发布时间】:2019-10-03 01:35:00
【问题描述】:

我正在使用 Cordova (PhoneGap) 和 cordova-plugin-ionic-webview 来使用经过微调的 Ionic Engine(使用 WKWebview)。

我可以使用安全的 httponly Auth Cookie 来登录,并且在我使用 iOS 应用程序时一切正常。当我关闭应用程序时,虽然 cookie 丢失了。

如何防止这种情况发生?

Android 上不存在此问题(并且 localStorage 在两个平台上都能正确保持其状态)。

Github 上仍未解决的问题:https://github.com/ionic-team/cordova-plugin-ionic-webview/issues/87

【问题讨论】:

  • 检查 cookie 过期日期如果您获得没有过期日期的 cookie,它将在会话结束后自动删除。
  • 这不是 cookie 的到期日期,它是在未来并且适用于 Android :(
  • 检查此stackoverflow.com/a/52490200/4311935。您需要在进行任何网络加载之前同步 cookie

标签: ios cordova ionic-framework hybrid-mobile-app phonegap


【解决方案1】:

我认为默认情况下,它现在似乎在 ionic 或 cordova 项目上安装 WKWebView,至少在我的情况下(它在 plugins 文件夹中显示为插件)。所以我卸载了插件并将这一行添加到我的 config.xml 中:

<preference name="CordovaWebViewEngine" value="CDVUIWebViewEngine" />

然后我为我的 HTTP 提供程序全局设置:

$httpProvider.defaults.withCredentials = true;

或者对于您拥有的每个 HTTP 请求都可以这样做:

$http.post(url, {withCredentials: true, ...})

然后我在我的 .php/server 文件上设置这个:

header("Access-Control-Allow-Origin: http://localhost:8100"); // make sure this is the same on the client side
header("Access-Control-Allow-Headers: content-type,authorization");
header("Access-Control-Allow-Credentials: true");

上面提到的修复允许我在我的应用程序的每个页面/请求中保持相同的 cookie/会话。

我希望这会有所帮助。

编辑:

根据我遇到此问题时的发现,无法使用 WKWebView 持久化 cookie/会话,因为 Apple 没有添加修复程序(我可能完全错了,这正是我当时发现的。我认为您要么必须恢复为 UIWebView,要么完全使用不同的方法。

【讨论】:

  • 我遇到的问题不是在使用应用程序时使用 Auth cookie,它可以正常工作。问题是当我关闭应用程序时,这些 cookie 就消失了。我似乎对从第三方受信任域注入的 iframe 域的本地存储有同样的问题。在 Android 上它被保留,在 IOS 上它在应用程序强制关闭时被清除。我使用一种解决方法解决了这个问题,该解决方法允许我在该第三方域的本地存储中设置缺失值。我存储并从我的钥匙串中读取我需要存储在那里的敏感信息。
猜你喜欢
  • 2016-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-23
  • 1970-01-01
  • 2017-03-14
  • 1970-01-01
  • 2013-02-01
相关资源
最近更新 更多