2011-08-26 140 views
4

在我们的iPhone应用程序中,我们在服务器通信期间使用两个cookie。一个是短会话cookie(JSESSION),另一个是长会话cookie(REMEMBER ME)。如果答案来自服务器,它会发送一个短会话cookie,我可以在NSHTTPCookieStorage中找到它。NSHTTPCookieStorage和Cookie过期日期

我的问题是这个存储如何处理cookie的到期日期?因此,如果cookie过期了,它是否会自动删除该cookie,并且如果我在尝试从过期的存储中获取该cookie的名称后,是否会收到任何内容?或者我必须手动检查过期时间吗?

回答

5

我的问题是这个存储如何处理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自己

正如在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. 
+0

感谢回答普拉卡什 – madik

4

简称更加实用...

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