在我的 iPhone 应用程序中,我希望在应用程序重新启动时能够重用相同的服务器端会话。服务器上的会话由 cookie 标识,该 cookie 在每次请求时发送。当我重新启动应用程序时,该 cookie 消失了,我无法再使用相同的会话。
当我使用时我注意到了什么NSHTTPCookieStorage
查找我从服务器获得的cookie,是这样的[cookie isSessionOnly]
回报YES
。我的印象是,这就是为什么在我的应用程序重新启动时不保存 cookie 的原因。我需要做什么才能使我的 cookie 不只是会话?我必须从服务器发送哪些 HTTP 标头?
您可以通过保存 cookie 的属性字典来保存 cookie,然后在重新连接之前将其恢复为新的 cookie。
Save:
NSArray* allCookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:[NSURL URLWithString:URL]];
for (NSHTTPCookie *cookie in allCookies) {
if ([cookie.name isEqualToString:MY_COOKIE]) {
NSMutableDictionary* cookieDictionary = [NSMutableDictionary dictionaryWithDictionary:[[NSUserDefaults standardUserDefaults] dictionaryForKey:PREF_KEY]];
[cookieDictionary setValue:cookie.properties forKey:URL];
[[NSUserDefaults standardUserDefaults] setObject:cookieDictionary forKey:PREF_KEY];
}
}
Load:
NSDictionary* cookieDictionary = [[NSUserDefaults standardUserDefaults] dictionaryForKey:PREF_KEY];
NSDictionary* cookieProperties = [cookieDictionary valueForKey:URL];
if (cookieProperties != nil) {
NSHTTPCookie* cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
NSArray* cookieArray = [NSArray arrayWithObject:cookie];
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookies:cookieArray forURL:[NSURL URLWithString:URL] mainDocumentURL:nil];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)