我正在连接restful web服务,在登录时获取到了此会话ID。
"session":"86da8a2cb82ff46595bf2d8a57875e03"
登录一次后,此会话 ID 将用于获取应用程序其他视图的 web 服务数据。
如何将其设为全局变量,以便在会话值更改时也更改全局变量的值?
我正在连接restful web服务,在登录时获取到了此会话ID。
"session":"86da8a2cb82ff46595bf2d8a57875e03"
登录一次后,此会话 ID 将用于获取应用程序其他视图的 web 服务数据。
如何将其设为全局变量,以便在会话值更改时也更改全局变量的值?
我也正在使用Web API开发一个iPad应用程序。
当您使用NSHttpRequest发送请求时,它会自动保存这些cookie,并将这些信息/cookie与任何���一步的Web服务URL请求一起发送。这是由基于Cookie存储策略的NSHttpCookieStorage完成的。默认情况下,此策略为NSHTTPCookieAcceptPolicyAlways。因此,在全局变量中不一定需要具有会话ID。
为了更好地理解,请查阅苹果公司关于URL加载系统的文档。特别是 URL加载系统概述 -> Cookie存储 部分。
当您注销或会话过期时,必须���动处理,即从NSHttpCookie中删除这些cookie并显示登录屏幕。
NSHTTPCookie *cookie;
for (cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies])
{
[[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
}
根据这个设计,我希望你不需要将session-id存储为全局变量。
这是我的iPad应用程序的工作方式。
如果您想要会话 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];
。