8

iPhone アプリでは、サーバー通信中に 2 つの Cookie を使用します。1 つは短いセッション Cookie (JSESSION) で、もう 1 つは長いセッション Cookie (REMEMBER ME) です。サーバーから応答がある場合、サーバーは短いセッション Cookie を送信します。これは、NSHTTPCookieStorage で確認できます。

私の質問は、このストレージが Cookie の有効期限をどのように処理するかです。Cookie の有効期限が切れた場合、その Cookie は自動的に削除されますか? また、有効期限が切れた後にストレージからこの Cookie を名前で取得しようとすると、何かを取得できますか? または、有効期限を手動で確認する必要がありますか?

4

2 に答える 2

9

私の質問は、このストレージが Cookie の有効期限をどのように処理するかです。

NSHTTPCookieStorage は、プロパティの 1 つとして有効期限を持つ 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.
于 2011-08-26T19:37:39.510 に答える
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;
}
于 2013-09-01T20:50:03.420 に答える