iPhone 应用程序的会话管理

3

我正在连接restful web服务,在登录时获取到了此会话ID。

"session":"86da8a2cb82ff46595bf2d8a57875e03"

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

如何将其设为全局变量,以便在会话值更改时也更改全局变量的值?

2个回答

4

我也正在使用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应用程序的工作方式。


谢谢Durai...你能否给我推荐一些关于nshttpcookie的教程链接吗? - user831679
我建议您阅读我所提到的苹果文档。它提供了相关类和相应文档的链接。 - durai
很好的点子,NSHttpRequest、NSHttpCookieStorage和NSHttpCookieAcceptPolicyAlways。 - Durai Amuthan.H

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

没问题...我现在明白了,我可以做到 :) - user831679

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接