2010-10-30 131 views
4

我的iPhone應用程序中有NSHTTPCookieStorage的一些奇怪的問題。當我在我的Web服務上調用登錄操作時,服務會發回一個名爲「auth」的授權cookie以及其他一些cookie。爲什麼NSHTTPCookieStorage不能正確保存cookie?

當我將用戶登錄出去時,我會在服務器上調用註銷操作來刪除cookie。如果我在調用註銷之前打印[NSHTTPCookieStorage cookies]的結果,我會按預期看到auth cookie。在我註銷後,我發現auth cookie不再存在(如預期的那樣)。

但是,如果我關閉了應用程序並重新啓動它,auth cookie又回來了!

我不確定這裏發生了什麼事。如果NSHTTPCookieStorage沒有保留任何cookie,這將是一回事,但它似乎是挽救了其中的一些。

有誰知道發生了什麼事?我需要手動管理Cookie嗎?有什麼辦法將NSHTTPCookieStorage中的內容提交到磁盤?

+0

我也看到相關的行爲,如果我從Web請求收到一個cookie,確認它存在,然後在幾秒鐘後關閉應用程序(並將其從背景托盤中移除),則Cookie不在當我啓動應用程序。然而,這並不一致。 – 2010-12-15 01:47:41

+0

abraginsky:不幸的是,這正是我所看到的。我通過將相關cookie保存在NSUserDefaults中並在應用程序啓動時從用戶默認值填入NSHTTPURLCookieStorage來解決此問題。它完成了這項工作,但是找出NSHTTPCookieStorage有什麼問題是很好的。 – Bill 2010-12-15 02:07:07

+0

是的,我看到了相同的解決方法,目前正在努力實施它。在用戶從後臺托盤中終止應用程序之前,需要確保NSUserDefault正在用cookie快速更新。把它放在「將終止」將不起作用,因爲這沒有被調用(至少在模擬器中)。 – 2010-12-15 02:33:31

回答

1

存在三種本地存儲機制相關的URL請求,這些請求會影響驗證質詢的處理方式:(明顯)NSHTTPCookieStorageNSURLCredentialStorageNSURLCacheNSURLCredentialStorage可能是您應該查看的下一個地方,但清除所有緩存通常被認爲是具有所需效果的最可靠方法。

這段代碼很方便:https://gist.github.com/559071(清除所有緩存)。

+0

試過了。如果我在執行刪除操作後立即查看[NSHTTPCookieStorage cookies],它們就消失了;但是當我再次打開該應用程序時,[NSHTTPCookieStorage cookies]擁有它最初擁有的cookie! – Bill 2010-11-03 00:24:12

+0

對不起,我以爲你實現了一個不同的機制。我有另一個想法... – 2010-11-03 08:52:11

+0

編輯我的原始答案。希望能幫助到你。 – 2010-11-03 16:46:01

0

尼克,我假設你正在用XCode 3.x構建IOS 4.x SDK。這可能是一個長鏡頭,但你提到你關閉了應用程序,然後重新啓動它。從iOS 4.x開始,默認情況下在iPhone Apps上啓用多任務處理。這意味着無論您是否需要,您的應用程序都會保留在內存中,如果您只是簡單地關閉它即可。解決此問題的方法是進入您的app-name-Info.plist並將「應用程序不在後臺運行」鍵添加到列表中。然後在複選框中選中一個支票。我建議您在保存項目後,在此時進行全面清理和構建。此外,如果您正在模擬器中運行,則會建議您通過選擇「iPhone Simulator」完全重置模擬器,然後從應用程序下拉菜單中選擇「重置內容和設置」。

+0

這是我(比爾)誰問了原來的問題:) – Bill 2010-11-08 12:16:22

0

我也面臨同樣的問題,我解決了它通過使用NSUserDefaults。請致電this link