2016-10-04 21 views
8

語境:

  • 我們有一個科爾多瓦應用程序加載在線網站。 (我們基本上是用科爾多瓦的插件)
  • 我們店使用Cookie $cookies.put()
  • 它在桌面瀏覽器和iOS正常工作(只要我們採用了 cookie過期)

問題:

在Android上,如果用戶在調用$cookies.put()後用30秒殺死應用程序,則cookie將在下次重新啓動時消失。

如果用戶等待超過30秒(如35秒或更長),一切工作正常。

問:

我們怎麼能強制將立即保存(或至少要快得多)的餅乾嗎?

注:

  • 上的Cookie中添加選項不會改變任何東西
  • 我試着用cordova-plugin-crosswalk-webview以取代人行橫道系統瀏覽器,但它做同樣的事情
+1

您是否嘗試過使用本地存儲? Safari中的默認安全選項可能會導致某些用戶出現Cookie問題。 –

+1

這個問題僅限於Android。 – jrobichaud

+1

但是,爲什麼你特意使用cookie? –

回答

2

我有同樣的問題,並做了一個小插件(仍在工作中)來解決這個問題。

它公開了flush方法,該方法將您的cookie修改(放置和移除)應用於持久性內存。

link to cordova-plugin-cookie-manager

隨意作出貢獻。

+0

經過測試工作,謝謝! :d – GabLeRoux

1

的Android中的設計使得它很難實現。 webviewcookiemanager其中包含它們自己的in_memory數據庫並且彼此同步,因此不需要同步它們中的兩個。

removeSessionCookie不提供回調或任何方式完成,因爲此方法已在WebView經典版本中實施。

這裏有一些解決方案,可以在其中HttpUrlCookieManager之間同步並在android webkit cookie manager

Sync up link 1

另一件事這裏要注意的是,當你使用$cookie.put()它定義了cookies要與其他地區一起發送HTTP標頭給客戶端,但如果您使用third party api's獲取cookies,則它可能不再僅包含來自client的cookie,這可能會導致不必要的副作用。

您可以參考這裏的聯繫,建議依作者這個帖子 - author' post這裏是鏈接,在定義餅乾link here

這裏所使用的協議是另一個鏈接,我偶然發現了這可能大家有點幫助

link here

或使用webview和同庫/數據庫HttpUrlConnection您可以創建自己的處理程序,在跟隨着實施g堆棧線程Stack thread

希望它可以幫助你一點。

+1

我最好的猜測是實現一個調用'CookieManager.flush()'的插件,因爲'sync()'已被棄用。 https://developer.android.com/reference/android/webkit/CookieManager.html#flush() – jrobichaud