0

我必须设置 NSHTTPCookie 使其到期设置为Session。我使用以下代码来设置该 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,而不是将到期时间设置为Session

4

1 回答 1

3

你应该看看sessionOnly属性。 苹果文档

它说:

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

如果应在会话结束时丢弃接收器(无论到期日期如何),则为 YES,否则为 NO。

您还可以查看一流的库ASIHTTPRequest

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

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

因此,您可能想要创建一个NSHTTPCookie没有到期日期的设置。

此信息也可以在Apple Docs 中找到:

接收者的过期日期,如果没有特定的过期日期,例如“仅会话”cookie,则为 nil。过期日期是应该删除 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];
于 2014-12-30T11:15:03.770 回答