編輯:適應編輯的問題
NSHTTPCookieStorage
有-setCookies:forURL:mainDocumentURL:
方法,所以容易的事是使用NSURLConnection
和實施-connection:didReceiveResponse:
,提取餅乾和它們塞進餅乾罐:
- (void)connection: (NSURLConnection *)connection
didReceiveResponse: (NSURLResponse *)response
{
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
NSArray *cookies;
cookies = [ NSHTTPCookie cookiesWithResponseHeaderFields:
[ httpResponse allHeaderFields ]];
[[ NSHTTPCookieStorage sharedHTTPCookieStorage ]
setCookies: cookies forURL: self.url mainDocumentURL: nil ];
}
(你也可以簡單地提取從NSHTTPCookie
與properties
一個NSDictionary
對象,然後寫字典中的磁盤。讀它放回就像使用一樣方便。NSDictionary
的-dictionaryWithContentsOfFile:
,然後創建與-initWithProperties:
餅乾)
然後你就可以拉餅乾背出存儲的,當你需要它:
- (void)reloadWebview: (id)sender
{
NSArray *cookies;
NSDictionary *cookieHeaders;
NSMutableURLRequest *request;
cookies = [[ NSHTTPCookieStorage sharedHTTPCookieStorage ]
cookiesForURL: self.url ];
if (!cookies) {
/* kick off new NSURLConnection to retrieve new auth cookie */
return;
}
cookieHeaders = [ NSHTTPCookie requestHeaderFieldsWithCookies: cookies ];
request = [[ NSMutableURLRequest alloc ] initWithURL: self.url ];
[ request setValue: [ cookieHeaders objectForKey: @"Cookie" ]
forHTTPHeaderField: @"Cookie" ];
[ self.webView loadRequest: request ];
[ request release ];
}
NSHTTPCookieStorage肯定會完全實現一個持久性cookie存儲。這只是在服務器端正確設置cookie生命週期的問題。 – Till 2011-05-10 19:36:21
是的,它確實實現了持久cookie存儲。唯一的問題是,當應用程序在Cookie設置後立即退出時,它會失敗。 – kball 2011-05-10 19:47:17
球,我們結束了這個解決方案,它非常接近您的答案:http://lists.apple.com/archives/Webkitsdk-dev/2003/Sep/msg00003.html – 2011-05-10 20:33:19