整个应用程序iphone的会话管理

时间:2011-12-29 10:27:12

标签: iphone objective-c ios

我正在与宁静的网络服务建立联系,登录时我会收到此会话ID。

"session":"86da8a2cb82ff46595bf2d8a57875e03"

登录一次后,此会话ID将用于从Web服务获取该应用程序的其他视图的数据。

如何使其全局化,以便如果会话值发生变化,全局变量的值也会发生变化

2 个答案:

答案 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];