2013-01-17 39 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:]:无法识别的选择器发送到实例 –