我正在与宁静的网络服务建立联系,登录时我会收到此会话ID。
"session":"86da8a2cb82ff46595bf2d8a57875e03"
登录一次后,此会话ID将用于从Web服务获取该应用程序的其他视图的数据。
如何使其全局化,以便如果会话值发生变化,全局变量的值也会发生变化
答案 0 :(得分:4)
我也正在使用网络API为网络服务做一个ipad应用。
当您使用NSHttpRequest发送请求时,它将自动保存这些cookie,并将发送这些信息/ cookie以及任何进一步的Web服务URL请求。它由NSHttpCookieStorage根据cookie存储策略完成。默认情况下,此策略为NSHTTPCookieAcceptPolicyAlways。因此,可能没有必要在全局变量中使用session-id。
为了更好地理解,请查看有关URL Loading System的Apple文档。特别是网址加载系统概述 - > Cookie存储部分。
当您注销或会话过期时,您必须手动处理,即从NSHttpCookie中删除这些cookie并显示登录屏幕。
NSHTTPCookie *cookie;
for (cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies])
{
[[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
}
我希望根据这个设计你不需要将session-id存储为全局变量。
这就是我的iPad应用程序的工作方式。
答案 1 :(得分:1)
如果您希望会话ID仅在应用程序打开时持续,则可以使用全局变量。如果您希望会话ID持续更长时间,可以将其存储在user defaults。
中示例:强>
// global variable
static NSString * sessionIDStore = nil;
+ (NSString*)sessionID {
return sessionIDStore;
}
+ (void)setSessionID:(NSString*)newSessionID {
[newSessionID retain];
[sessionIDStore release];
sessionIDStore = newSessionID;
}
// user defaults
+ (NSString*)sessionID {
return [[NSUserDefaults standardUserDefaults] objectForKey:@"myapp.sessionID"];
}
+ (void)setSessionID:(NSString*)newSessionID {
[[NSUserDefaults standardUserDefaults] setObject:newSessionID forKey:@"myapp.sessionID"];
}
如果您使用NSUserDefaults
,请记得在您的应用即将退出时致电[[NSUserDefaults standardUserDefaults] synchronize];
。