1

問題摘要:我正在使用MKNetworkKit並使用Basic Auth根據REST服務器對自己進行身份驗證。我不是服務器端詳細設置的專家。我所知道的是,它將採用沒有SSL的基本身份驗證。MKNetworkKit:如何清除身份驗證相關緩存

如果我使用有效的用戶/密碼對自己進行身份驗證,並且如果我第二次使用某些虛假輸入進行身份驗證,它仍然會成功。我閱讀文檔並試圖做到這一點:

[op setCredentialPersistence:NSURLCredentialPersistenceNone]; 

它不工作。但是,如果我這樣做:

[op setCredentialPersistence:NSURLCredentialPersistenceNone]; 
[op addHeader:@"Cookie" withValue:@""]; // a hunch I tried 

然後它似乎工作。就好像某個cookie總是被傳遞,服務器接受它,甚至沒有檢查授權頭。我已經做了一些測試,我會按照這個順序(好,假,好)和(假,好,假)提供東西,而且它似乎按預期工作。

現在,有人可能會指出,如果這不是應該如何工作,那麼肯定有某個地方,或者是MKNetworkKit或者服務器端?如果我設置了NSURLCredentialPersistenceNone,那麼爲什麼要添加Cookie頭將使其工作?它必須覆蓋它會發送的東西並導致錯誤的行爲,從而「修復」它。

+0

服務器可能在驗證後添加會話cookie。嘗試在請求之前和收到響應之後記錄'[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]'。 – Moxy

回答

0

由於HTTP協議的無狀態特性,客戶端通常使用cookie來提供跨URL請求的持久性數據存儲。 URL加載系統提供接口來創建和管理cookie,發送cookie作爲HTTP請求的一部分,並在解釋web服務器的響應時接收cookie。 OS X和iOS提供NSHTTPCookieStorage類,該類繼而提供管理NSHTTPCookie對象集合的接口。在OS X中,所有應用程序共享cookie存儲;在iOS中,Cookie存儲是按應用程序進行的(請檢查https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/URLLoadingSystem/URLLoadingSystem.html#//apple_ref/doc/uid/10000165-BCICJDHA)正如Moxy所述嘗試記錄[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]。我面臨同樣的問題,原因是服務器使用和維護了Cookie。發生每當我登錄使用我檢查在

  • 請求和響應的憑證(的NSURLRequest )連接:(NSURLConnection的)inConnection willSendRequest:(的NSURLRequest *)inRequest redirectResponse:(NSURLResponse *)inRedirectResponse

Cookie中保留了頭文件。您可以做的唯一事情就是爲新會話發送隨機Cookie