iOS:存储在会话中过期的cookie

时间:2014-12-30 11:05:09

标签: ios objective-c nshttpcookie nshttpcookiestorage

我必须设置NSHTTPCookie,使其到期时间设置为会话。我使用以下代码来设置该cookie的属性。

NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];

[cookieProperties setObject:@"mycookiename" forKey:NSHTTPCookieName];
[cookieProperties setObject:@"mycookievalue" forKey:NSHTTPCookieValue];
[cookieProperties setObject:[NSNumber numberWithBool:TRUE] forKey:NSHTTPCookieSecure];
[cookieProperties setObject:@"com.mydomain" forKey:NSHTTPCookieDomain];
[cookieProperties setObject:@"com.mydomain" forKey:NSHTTPCookieOriginURL];
[cookieProperties setObject:@"/" forKey:NSHTTPCookiePath];
[cookieProperties setObject:@"0" forKey:NSHTTPCookieVersion];

NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];

但是,上述两个属性都将到期时间设置为 2001年1月1日02:00:00 GMT + 2 ,而不是将到期时间设置为会话

1 个答案:

答案 0 :(得分:3)

您应该查看 sessionOnly 属性。 Apple Documentation

它说:

  

一个布尔值,指示是否应在会话结束时丢弃接收方(无论到期日期如何)。 (只读)

     

如果接收方应在会话结束时丢弃,则为“是”   (不论有效期限),否则为NO。

您还可以查看精湛的资料库ASIHTTPRequest

它有一些很好的方法可以帮助你。从他们的方法:

  

在这种情况下,“会话cookie”是指在会话期间创建的所有cookie,而不是在应用程序退出时删除的没有到期日期的cookie(通常称为会话cookie)。

因此,您可能希望创建一个没有设置过期日期的NSHTTPCookie

此信息也可以在 Apple文档

中找到
  

接收方的到期日期,如果没有特定的到期日期,则为零,例如“仅限会话”的cookie。到期日期是应删除cookie的日期。

这样做:

NSDictionary *properties = [[[NSMutableDictionary alloc] init] autorelease];
[properties setValue:[@"Test Value" encodedCookieValue] forKey:NSHTTPCookieValue];
[properties setValue:@"ASIHTTPRequestTestCookie" forKey:NSHTTPCookieName];
[properties setValue:@".allseeing-i.com" forKey:NSHTTPCookieDomain];

//Here you can set expiration date
[properties setValue:[NSDate dateWithTimeIntervalSinceNow:60*60] forKey:NSHTTPCookieExpires];      
[properties setValue:@"/asi-http-request/tests" forKey:NSHTTPCookiePath];
NSHTTPCookie *cookie = [[[NSHTTPCookie alloc] initWithProperties:properties] autorelease];