iOS: хранение файлов cookie, срок действия которых истекает во время сеанса
Я должен установить NSHTTPCookie таким образом, чтобы срок его действия был установлен на Session. Я использовал следующий код для установки свойств этого куки.
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];
Однако оба вышеуказанных свойства устанавливают срок действия на 1 января 2001 года 02:00:00 по Гринвичу +2 вместо того, чтобы устанавливать срок действия для сеанса
1 ответ
Вы должны взглянуть на свойство sessionOnly. Документация Apple
Это говорит:
Логическое значение, которое указывает, должен ли получатель быть сброшен в конце сеанса (независимо от срока действия). (Только для чтения)
ДА, если получатель должен быть сброшен в конце сеанса (независимо от срока действия), в противном случае НЕТ.
Вы также можете взглянуть на превосходную библиотеку ASIHTTPRequest
У него есть несколько хороших методов, которые могут вам помочь. Из их How-To:
В этом случае "сеансовые файлы cookie" относятся ко ВСЕМ файлам cookie, созданным во время сеанса, а именно к файлам cookie без даты истечения срока действия (часто называемые "файлами cookie сеанса"), которые удаляются при выходе из приложения.
Таким образом, вы можете создать NSHTTPCookie
без даты истечения срока действия.
Эту информацию также можно найти в Apple Docs:
Дата истечения срока действия получателя или ноль, если нет конкретной даты истечения срока действия, например, в случае файлов 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];