`$ cookies.put()`需要30秒才能在Android上的磁盘上保存cookie

时间:2016-10-04 00:49:44

标签: android angularjs cordova cookies

上下文

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

问题:

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

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

问题:

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

备注:

  • 在Cookie上添加选项不会改变任何内容
  • 我尝试使用cordova-plugin-crosswalk-webview用人行横道替换系统浏览器,但它做同样的事情

2 个答案:

答案 0 :(得分:3)

我遇到了同样的问题并制作了一个小插件(仍在进行中)以解决这个问题。

它公开了flush方法,它将cookie修改(put和remove)应用于持久性内存。

link to cordova-plugin-cookie-manager

随意贡献。

答案 1 :(得分:1)

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

中实现的那样

希望它可能对你有所帮助。