NSHTTPCookieStorage и срок годности файлов cookie - PullRequest
6 голосов
/ 26 августа 2011

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

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

Ответы [ 2 ]

6 голосов
/ 26 августа 2011

Мой вопрос: как это хранилище обрабатывает дату истечения срока действия куки?

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 по его имени из хранилища после истечения срока его действия, получу ли я что-нибудь?Или я должен проверить срок действия вручную?

Вы должны вручную проверить срок действия и удалить 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.
4 голосов
/ 02 сентября 2013

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

+(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;
}
...