1. ホーム
  2. objective-c

UIWebViewのsharedHTTPCookieStorageを使用して、手動でクッキーを設定することは可能でしょうか?

2023-09-09 20:19:40

質問

適切に認証されるために認証クッキーを必要とするiOSアプリケーション内のウェブビューを持っています。私はすでにクライアント上の認証情報を持っているので、クッキーを設定するためにアウトバウンドの要求をすることなく、iOSアプリケーションのWebviewの内部でクッキーを設定する方法を探しています。

これは ポスト は、UIWebView のクッキーがどこに保存されているかを示しています。

今現在、私はアウトバウンドリクエストを行うために隠されたWebビューをロードしていますが、単純なクッキーを設定するために外部リクエストを行う必要がないことを望みます。

どのように解決するのですか?

はい、できます。まず、applicationDidBecomeActiveに次の行を追加します。

[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];

cookieAcceptPolicyはアプリ間で共有され、知らないうちに変更される可能性があるので、アプリが実行されるたびに必要なacceptポリシーがあることを確認したいものです。

次に、Cookieを設定するために

NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];
[cookieProperties setObject:@"testCookie" forKey:NSHTTPCookieName];
[cookieProperties setObject:@"someValue123456" forKey:NSHTTPCookieValue];
[cookieProperties setObject:@"www.example.com" forKey:NSHTTPCookieDomain];
[cookieProperties setObject:@"www.example.com" forKey:NSHTTPCookieOriginURL];
[cookieProperties setObject:@"/" forKey:NSHTTPCookiePath];
[cookieProperties setObject:@"0" forKey:NSHTTPCookieVersion];

// set expiration to one month from now or any NSDate of your choosing
// this makes the cookie sessionless and it will persist across web sessions and app launches
/// if you want the cookie to be destroyed when your app exits, don't set this
[cookieProperties setObject:[[NSDate date] dateByAddingTimeInterval:2629743] forKey:NSHTTPCookieExpires];

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

このクッキーは testCookie という名前と someValue123456 という値を持ち、www.example.com へのあらゆる http リクエストとともに送信されます。

クッキーを設定する際の1つの大きな注意点については、こちらの質問をご覧ください!

NSHTTPCookieStorageの状態がアプリ終了時に保存されない。何か決定的な知識/文書があるのでしょうか?