iosにおけるcookiesの紹介と基本的な使い方
4099 ワード
一.Cookie
Cookieはクライアントにサーバ状態を格納するメカニズムであり、WebサーバはSet-CookieまたはSet-Cookie 2 HTTPヘッダを介してCookieを設定することができる.
Cookieは、セッションCookieと永続Cookieの2つに分類され、セッションCookieは一時Cookieであり、現在のセッション終了(ブラウザ終了)時にCookieが削除されます.永続Cookieはユーザーのハードディスクに格納され、ブラウザが終了し、再起動してもCookieは存在します.セッションCookieと永続Cookieの違いは、Discardパラメータ(Cookieバージョン1)が設定されている場合、またはExpires(Cookieバージョン0)またはMax-AGe(Cookieバージョン1)が設定されていない場合、このCookieはセッションCookieです.
Cookieには2つのバージョンがあり、1つはバージョン0(Netscape Cookies)とバージョン1(RFC 2965)で、現在多くのサーバで使用されているCookie 0です.
Cookieの詳細については、「HTTP権威ガイド」の章を参照してください.
二.NSHTTPCookie
iOSでNSHTTPCookieクラスを使用して1つのcookieをカプセル化し、NSHTTPCookieの方法でcookieの汎用属性を読み取る.
Cookieは、手動で値を割り当てることで作成できます.
Cookieからすべてのプロパティを読み込むこともできます.
NSHTTPCookieのクラスメソッドを用いる、NSHTTPCookieインスタンスとHTTP cookieヘッダとを相互に変換することができる.
NSHTTPCookieインスタンス配列から対応するHTTP cookieヘッダを生成する
HeaderFiledsからCookie関連コンテンツを読み込み、NSHTTPCookieインスタンスオブジェクト配列を生成します.
この方法では、headerFiledsのクッキーに関係のないフィールドは無視する、headerFiledsのクッキーがdomainを指定していない場合はtheURLのdomainを使用し、pathを指定していない場合は「/」を使用する.
URL loading systemは、NSURLRequestがクッキーを使用しないことを明確に指定しない限り、適切なストレージクッキーをNSURLRequestに自動的に送信します.NSURLResponseから返されるクッキーも、現在のクッキーアクセスポリシー(クッキーacceptance policy)に従ってシステムに受信されます.
三.NSHTTPCookieStorage
NSHTTPCookieStorage単品クラスは、すべてのNSHTTPCookieオブジェクトを管理するインタフェースを提供します.OS Xでは、cookieはすべてのプログラムで共有されていますが、iOSでは、cookieは現在のアプリケーションでのみ有効です.
共有NSHTTPCookieStorage単品オブジェクトはsharedHTTPCookieStorageメソッドで入手できます.
NSHTTPCookieStorage単品オブジェクトを使用して、現在保存されているすべてのCookieを取得します.
または特定のURLに対するクッキー
Cookieの追加/削除も可能
NSHTTPCookieStorageによるCookie受信ポリシーの読み取り/変更は、NSHTTPCookieAcceptPolicyAlwaysがデフォルトである.
全部で3種類のクッキーaccept policyがあり、
Cookieはクライアントにサーバ状態を格納するメカニズムであり、WebサーバはSet-CookieまたはSet-Cookie 2 HTTPヘッダを介してCookieを設定することができる.
Cookieは、セッションCookieと永続Cookieの2つに分類され、セッションCookieは一時Cookieであり、現在のセッション終了(ブラウザ終了)時にCookieが削除されます.永続Cookieはユーザーのハードディスクに格納され、ブラウザが終了し、再起動してもCookieは存在します.セッションCookieと永続Cookieの違いは、Discardパラメータ(Cookieバージョン1)が設定されている場合、またはExpires(Cookieバージョン0)またはMax-AGe(Cookieバージョン1)が設定されていない場合、このCookieはセッションCookieです.
Cookieには2つのバージョンがあり、1つはバージョン0(Netscape Cookies)とバージョン1(RFC 2965)で、現在多くのサーバで使用されているCookie 0です.
Cookieの詳細については、「HTTP権威ガイド」の章を参照してください.
二.NSHTTPCookie
iOSでNSHTTPCookieクラスを使用して1つのcookieをカプセル化し、NSHTTPCookieの方法でcookieの汎用属性を読み取る.
- (NSUInteger)version;
- (NSString *)name;
- (NSString *)value;
- (NSString *)domain;
- (NSString *)path;
- (BOOL)isSessionOnly;
Cookieは、手動で値を割り当てることで作成できます.
+ (id)cookieWithProperties:(NSDictionary *)properties;
- (id)initWithProperties:(NSDictionary *)properties;
+ (NSArray *)cookiesWithResponseHeaderFields:(NSDictionary *)headerFields
forURL:(NSURL *)theURL;
Cookieからすべてのプロパティを読み込むこともできます.
- (NSDictionary *)properties;
NSHTTPCookieのクラスメソッドを用いる、NSHTTPCookieインスタンスとHTTP cookieヘッダとを相互に変換することができる.
NSHTTPCookieインスタンス配列から対応するHTTP cookieヘッダを生成する
+ (NSDictionary *)requestHeaderFieldsWithCookies:(NSArray *)cookies;
HeaderFiledsからCookie関連コンテンツを読み込み、NSHTTPCookieインスタンスオブジェクト配列を生成します.
この方法では、headerFiledsのクッキーに関係のないフィールドは無視する、headerFiledsのクッキーがdomainを指定していない場合はtheURLのdomainを使用し、pathを指定していない場合は「/」を使用する.
URL loading systemは、NSURLRequestがクッキーを使用しないことを明確に指定しない限り、適切なストレージクッキーをNSURLRequestに自動的に送信します.NSURLResponseから返されるクッキーも、現在のクッキーアクセスポリシー(クッキーacceptance policy)に従ってシステムに受信されます.
三.NSHTTPCookieStorage
NSHTTPCookieStorage単品クラスは、すべてのNSHTTPCookieオブジェクトを管理するインタフェースを提供します.OS Xでは、cookieはすべてのプログラムで共有されていますが、iOSでは、cookieは現在のアプリケーションでのみ有効です.
共有NSHTTPCookieStorage単品オブジェクトはsharedHTTPCookieStorageメソッドで入手できます.
+ (NSHTTPCookieStorage *)sharedHTTPCookieStorage;
NSHTTPCookieStorage単品オブジェクトを使用して、現在保存されているすべてのCookieを取得します.
- (NSArray *)cookies
または特定のURLに対するクッキー
- (NSArray *)cookiesForURL:(NSURL *)theURL;
Cookieの追加/削除も可能
– deleteCookie:
– setCookie:
– setCookies:forURL:mainDocumentURL:
NSHTTPCookieStorageによるCookie受信ポリシーの読み取り/変更は、NSHTTPCookieAcceptPolicyAlwaysがデフォルトである.
- (NSHTTPCookieAcceptPolicy)cookieAcceptPolicy;
- (void)setCookieAcceptPolicy:(NSHTTPCookieAcceptPolicy)aPolicy.
全部で3種類のクッキーaccept policyがあり、
typedef enum { NSHTTPCookieAcceptPolicyAlways, NSHTTPCookieAcceptPolicyNever, NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain } NSHTTPCookieAcceptPolicy;
NSHTTPCookieAcceptPolicyAlways:すべてのCookieを受信し、デフォルトポリシー.NSHTTPCookieAcceptPolicyNever:すべてのCookieを拒否NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain:main document domainのcookieのみを受信.
四.関連通知
NSHTTPCookieManagerCookies ChangedNotificationこの通知は、NSHTTPCookieStorageインスタンスのcookiesが変更されたときに発行されます.
NSHTTPCookieManagerAcceptPolicyChangedNotificationこの通知は、NSHTTPCookieStorageインスタンスのCookie acceptance policyが変化したときに発行されます.WU
五.関連実装- (void)saveCookies { NSData *cookies = [NSKeyedArchiver archivedDataWithRootObject:[NSHTTPCookieStorage sharedHTTPCookieStorage].cookies]; [[NSUserDefaults standardUserDefaults] setObject:cookies forKey:@"savedCookie"]; [[NSUserDefaults standardUserDefaults] synchronize]; } - (void)reloadStoredCookies { NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] objectForKey:@"savedCookie"]]; NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; for (NSHTTPCookie *cookie in cookies) { [cookieStorage setCookie:cookie]; } }
参考:NSHTTPCookieStorage Class ReferenceNSHTTPCookie Class Reference URL Loading System Programming Guide–Cookie Storage