NSHTTPCookieStorage и срок действия файлов cookie

В нашем приложении для iPhone мы используем два куки во время общения с сервером. Один из них - короткий сессионный cookie (JSESSION), а другой - длинный сессионный cookie (MEMEMBER ME). Если ответ приходит с сервера, он отправляет короткий сеансовый файл cookie, который я могу найти в NSHTTPCookieStorage.

У меня вопрос, как это хранилище обрабатывает срок годности куки? Поэтому, если срок действия файла cookie истекает, автоматически ли он удаляется, и если я пытаюсь получить этот файл cookie по его имени из хранилища после истечения срока действия, получу ли я что-нибудь? Или я должен проверить срок действия вручную?

2 ответа

Решение

У меня вопрос, как это хранилище обрабатывает срок годности куки?

NSHTTPCookieStorage хранит объекты NSHTTPCookie, срок действия которых истекает, как одно из его свойств.

http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSHTTPCookie_Class/Reference/Reference.html#//apple_ref/occ/cl/NSHTTPCookie

Поэтому, если срок действия файла cookie истекает, он автоматически удаляет этот файл cookie, и если я пытаюсь получить этот файл cookie по его имени из хранилища после истечения срока действия, получу ли я что-нибудь? Или я должен проверить срок действия вручную?

Вы должны вручную проверить срок действия и удалить куки самостоятельно

Как указано в http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSHTTPCookie_Class/Reference/Reference.html#//apple_ref/occ/cl/NSHTTPCookie

The receiver’s expiration date, or nil if there is no specific expiration date such as in the case of “session-only” cookies. The expiration date is the date when the cookie should be deleted.

Чтобы быть более практичным...

+(BOOL) isCookieExpired{

    BOOL status = YES;

    NSArray *oldCookies = [[ NSHTTPCookieStorage sharedHTTPCookieStorage ]
                           cookiesForURL: [NSURL URLWithString:kBASEURL]];
    NSHTTPCookie *cookie = [oldCookies lastObject];
    if (cookie) {
        NSDate *expiresDate =    [cookie expiresDate];
        NSDate *currentDate = [NSDate date];
        NSComparisonResult result = [currentDate compare:expiresDate];

        if(result==NSOrderedAscending){
            status = NO;
            NSLog(@"expiresDate is in the future");
        }
        else if(result==NSOrderedDescending){
            NSLog(@"expiresDate is in the past");
        }
        else{
            status = NO;
            NSLog(@"Both dates are the same");
        }
    }

    return status;
}
Другие вопросы по тегам