0

有効期限がSessionに設定されるように NSHTTPCookie を設定する必要があります。次のコードを使用して、その Cookie のプロパティを設定しました。

NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];

[cookieProperties setObject:@"mycookiename" forKey:NSHTTPCookieName];
[cookieProperties setObject:@"mycookievalue" forKey:NSHTTPCookieValue];
[cookieProperties setObject:[NSNumber numberWithBool:TRUE] forKey:NSHTTPCookieSecure];
[cookieProperties setObject:@"com.mydomain" forKey:NSHTTPCookieDomain];
[cookieProperties setObject:@"com.mydomain" forKey:NSHTTPCookieOriginURL];
[cookieProperties setObject:@"/" forKey:NSHTTPCookiePath];
[cookieProperties setObject:@"0" forKey:NSHTTPCookieVersion];

NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];

ただし、上記のプロパティは両方とも、有効期限をセッションに設定するのではなく、有効期限を1 Jan 2001 02:00:00 GMT+2に設定します。

4

1 に答える 1

3

sessionOnlyプロパティ を確認する必要があります。アップルのドキュメント

それは言います:

セッションの終了時にレシーバーを破棄する必要があるかどうかを示すブール値 (有効期限に関係なく)。(読み取り専用)

(有効期限に関係なく) セッションの終了時にレシーバーを破棄する必要がある場合は YES、それ以外の場合は NO。

優れたライブラリASIHTTPRequestもご覧ください。

それはあなたを助けることができるいくつかの素晴らしい方法を持っています. ハウツーから:

この場合、「セッション Cookie」はセッション中に作成されたすべての Cookie を指し、アプリケーションの終了時に削除される有効期限のない Cookie (セッション Cookie と呼ばれることが多い) を指します。

NSHTTPCookieそのため、有効期限が設定されていないを作成することをお勧めします。

この情報は、 Apple ドキュメントにも記載されています。

受信者の有効期限、または「セッションのみ」の Cookie の場合のように特定の有効期限がない場合は nil。有効期限は、Cookie を削除する必要がある日付です。

そうするために:

NSDictionary *properties = [[[NSMutableDictionary alloc] init] autorelease];
[properties setValue:[@"Test Value" encodedCookieValue] forKey:NSHTTPCookieValue];
[properties setValue:@"ASIHTTPRequestTestCookie" forKey:NSHTTPCookieName];
[properties setValue:@".allseeing-i.com" forKey:NSHTTPCookieDomain];

//Here you can set expiration date
[properties setValue:[NSDate dateWithTimeIntervalSinceNow:60*60] forKey:NSHTTPCookieExpires];      
[properties setValue:@"/asi-http-request/tests" forKey:NSHTTPCookiePath];
NSHTTPCookie *cookie = [[[NSHTTPCookie alloc] initWithProperties:properties] autorelease];
于 2014-12-30T11:15:03.770 に答える