【问题标题】:`$cookies.put()` takes 30 seconds to save the cookie on disk on Android`$cookies.put()` 需要 30 秒才能将 cookie 保存在 Android 上的磁盘上
【发布时间】:2017-02-12 01:09:35
【问题描述】:

上下文:

  • 我们有一个加载在线网站的cordova 应用程序。 (我们基本上使用 cordova 作为插件)
  • 我们使用$cookies.put() 存储cookie
  • 它在桌面浏览器和 iOS 上运行良好(只要我们在 饼干)

问题:

在 Android 上,如果用户在调用 $cookies.put() 后 30 秒内终止应用程序,则 cookie 将在下次重启时消失。

如果用户等待超过 30 秒(比如 35 秒或更长时间),一切正常。

问题:

我们如何强制立即保存 cookie(或至少更快)?

注意事项:

【问题讨论】:

  • 您是否尝试过使用本地存储? Safari 中的默认安全选项可能会导致某些用户的 cookie 出现问题。
  • 此问题仅在 Android 上。
  • 但是你为什么要专门使用cookies呢?
  • @GabLeRoux article 针对的是在其正文中包含敏感信息的 JWT。所以他们试图将其隐藏在 XSS 黑客中,但他们并没有真正实现,只是更复杂。
  • 我想在本地存储中使用 JWT 可能是一种选择,但我仍然觉得原来的问题很奇怪。我们应该在最小的场景中重现这一点。

标签: android angularjs cordova cookies


【解决方案1】:

我遇到了同样的问题,并制作了一个小插件(仍在开发中)来解决这个问题。

它公开了 flush 方法,该方法会将您的 cookie 修改(放置和删除)应用到持久内存。

link to cordova-plugin-cookie-manager

请随意贡献。

【讨论】:

    【解决方案2】:

    android 中的CookieManager 设计使其难以实现。 webviewcookiemanager 包含自己的 in_memory 数据库并且彼此同步,因此无需同步它们两个。

    removeSessionCookie 不提供回调或任何方式来完成它,因为此方法已在 WebView 经典版本中实现。

    这里有一些解决方案,您可以在其中同步 HttpUrlCookieManagerandroid webkit cookie manager

    Sync up link 1

    这里要注意的另一件事是,当您使用 $cookie.put() 时,它定义了 cookies 与其余 HTTP 标头一起发送到客户端,但如果您使用 third party api's 获取 cookies 它可能不再包含仅来自 client 的 cookie,这可能会导致不必要的副作用。

    您可以参考本文作者建议的链接 - author' post 这是定义 cookie 时要使用的协议的链接 link here

    这是我偶然发现的另一个链接,可能会有所帮助

    link here

    或使用webviewHttpUrlConnection 的相同存储库/数据库,您可以创建自己的处理程序,如在以下堆栈线程Stack thread 中实现的那样

    希望对你有所帮助。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    相关资源
    最近更新 更多