我开发,其中服务器递给我一个cookie来识别用户的应用程序不坚持饼干。共享NSHTTPCookieStorage实例
我连续请求需要有一个cookie来具有用户所期望的响应。 我无法理解的是NSHTTPCookieStorage的共享实例如何以及何时丢失了其Cookie。
我使用的第一个解决方案是存档和从我的服务器饼干保存到应用终端从我的应用程序启动服务器,然后清除现有的用户默认设置和重置我储存的人。 通过开发过程,我没有遇到问题,因为调试会话非常短,通常不需要将应用程序放在后台。
在beta测试期间,麻烦开始了。 我附带的破解是不仅在应用程序终止时保存cookie,而且在将这些cookie递给我的API调用之后也保存这些cookie。并且不仅在应用程序启动时加载保存的Cookie,而且在应用程序返回到前台时也加载。
NSHTTPCookieStorage共享实例如何摆脱这些cookie以及处理它的最佳做法是什么,因为它是我的应用程序的重要组成部分,如果没有经验丰富的开发人员备份,我不能相信这样的黑客解决方案。
预先感谢您为您的回答
编辑: 这里有保存方法/读/清除饼干
-(void)saveStoredCookies
{
NSURL *httpUrl = @"http://myServer.com";
NSURL *httpsUrl = @"https://myServer.com";
NSArray *httpCookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:httpUrl];
NSData *httpCookiesData = [NSKeyedArchiver archivedDataWithRootObject:httpCookies];
[[NSUserDefaults standardUserDefaults] setObject:httpCookiesData forKey:@"savedHttpCookies"];
NSArray *httpsCookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:httpsUrl];
NSData *httpsCookiesData = [NSKeyedArchiver archivedDataWithRootObject:httpsCookies];
[[NSUserDefaults standardUserDefaults] setObject:httpsCookiesData forKey:@"savedHttpsCookies"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
-(void)readStoredCookies
{
//clear, read and install stored cookies
NSURL *httpUrl = @"http://myServer.com";
NSURL *httpsUrl = @"https://myServer.com";
NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:httpUrl];
for (NSHTTPCookie *cookie in cookies) {
[[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
}
cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:httpsUrl];
for (NSHTTPCookie *cookie in cookies) {
[[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
}
NSData *httpCookiesData = [[NSUserDefaults standardUserDefaults] objectForKey:@"savedHttpCookies"];
if([httpCookiesData length]) {
NSArray *savedCookies = [NSKeyedUnarchiver unarchiveObjectWithData:httpCookiesData];
for (NSHTTPCookie *cookie in savedCookies) {
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
}
}
NSData *httpsCookiesData = [[NSUserDefaults standardUserDefaults] objectForKey:@"savedHttpsCookies"];
if([httpsCookiesData length]) {
NSArray *savedCookies = [NSKeyedUnarchiver unarchiveObjectWithData:httpsCookiesData];
for (NSHTTPCookie *cookie in savedCookies) {
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
}
}
}
-(void)clearStoredCookies
{
NSURL *httpUrl = @"http://myServer.com";
NSURL *httpsUrl = @"https://myServer.com";
NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:httpUrl];
for (NSHTTPCookie *cookie in cookies) {
[[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
}
cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:httpsUrl];
for (NSHTTPCookie *cookie in cookies) {
[[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
}
}
请根据您使用的代码进行更新,以便在发出新请求时将Cookie从Cookie存储区中取出。你的描述是不够的。 – 2012-08-09 03:23:50
您没有看到问题,因为您无法在测试期间在新会话之间加载来自存储的Cookie。 – 2012-08-09 03:27:15