2016-03-02 67 views
1

我使用Okhttp3來發送http get/post請求。使用OkHttpClient發送cookies

即使在應用程序關閉時,我仍然使用PersistentCookiejar來保存Cookie,並且稍後再次啓動。

但是,當我進行HTTP調用時,OkHTTpClient不會將cookie從android設備發送到Web服務器。不知道如何解決它,如果http客戶端不發送每個http請求的cookie,我沒有看到持久化cookie的任何意義。

這是我用來初始化http客戶端的代碼,以及我如何發出http請求。

cookieJar = 
      new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(this)); 
    client = new OkHttpClient.Builder() 
      .cookieJar(cookieJar) 
      .build(); 


client.newCall(request).enqueue(new Callback() { 
    /** cookies are not sent to server. 
     **/ 
+0

你能確認cookies正在被保存嗎? –

+0

有什麼我應該做的,以保存餅乾。不要在收到回覆後自動保存。當新的CallBack()。onResponse()被調用? – user462455

+0

我應該使用CookieManager來確保cookie在響應後保存嗎? – user462455

回答

1

經過一段時間的調試後,我想清楚發生了什麼事情。

我的服務器發回的Cookies(會話cookie)沒有過期屬性。如果沒有expires屬性,PersistentCookieJar不會保留Cookie。因此,這些cookie只保存了Cookie緩存,它是內存中的,並且不是跨活動共享的(至少我的代碼不共享cookie緩存,我只共享持久存儲)。

更改我的服務器端代碼以發送帶有過期時間戳的cookie修復了問題。