NSHTTPCookieStorage和Cookie过期日期

8
在我们的iPhone应用中,我们在与服务器通信期间使用两个cookie。其中一个是短期会话cookie(JSESSION),另一个是长期会话cookie(REMEMBER ME)。如果从服务器收到答案,它会发送短期会话cookie,我可以在NSHTTPCookieStorage中找到它。
我的问题是这个存储如何处理cookie的到期日期?所以,如果cookie过期了,它是否会自动删除该cookie?如果在到期后尝试通过名称从存储中获取此cookie,会得到什么?还是必须手动检查到期时间?
2个回答

10

我的问题是这个存储如何处理cookie的过期日期?

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,我会得到任何东西吗?还是我必须手动检查过期时间?您应该手动检查过期时间并自行删除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.

5
为了更加实用...
+(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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接