2013-01-17 79 views
9

In:This Question據說AFNetworking在後臺自動照顧餅乾,但在Previous問題我問,我有問題保持會議上的服務器,這是在PHP中,當我登錄。一旦我關閉了(停止在Xcode中進行調試),應用程序又回到了會話中。答案是堅持餅乾,像這樣來解決這個問題:AFNetworking持久性曲奇餅自動

NSData *cookiesData = [[NSUserDefaults standardUserDefaults] objectForKey:@"User"]; 
if ([cookiesData length] > 0) { 
    for (NSHTTPCookie *cookie in [NSKeyedUnarchiver cookiesData]) { 
      [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie]; 
     } 
} 

這給了我一個應用程序崩潰,當我嘗試做這樣的事情。當我登錄我設置NSUserDefault像這樣:

[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"User"]; 
//Then synthesize 

這是錯誤的方式來使用它? NSHTTPCookieStorage甚至是我的問題嗎?謝謝。

回答

36

使用下,這是保存正確的方法,並且爲我工作負載餅乾:

- (void)saveCookies{ 

    NSData *cookiesData = [NSKeyedArchiver archivedDataWithRootObject: [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]]; 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject: cookiesData forKey: @"sessionCookies"]; 
    [defaults synchronize]; 

} 

- (void)loadCookies{ 

    NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData: [[NSUserDefaults standardUserDefaults] objectForKey: @"sessionCookies"]]; 
    NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 

    for (NSHTTPCookie *cookie in cookies){ 
     [cookieStorage setCookie: cookie]; 
    } 

} 

希望它能幫助!

+1

請記住,在'NSUserDefaults'中存儲會話cookie是一個糟糕的主意,因爲它在應用沙箱中未加密存儲。考慮使用鑰匙鏈,而不是 – jackslash

+1

它似乎與將它們存儲在網絡瀏覽器中一樣安全......或者我錯過了什麼? – Gazzini

+0

由於某種原因,我無法得到這個工作。即使在[self loadCookies]中分析出的Cookie看起來有效,它也會導致崩潰。 'NSInvalidArgumentException',原因:' - [__ NSCFDictionary objectAtIndexedSubscript:]:無法識別的選擇器發送到實例 –