iOSにおけるクッキーの簡単なアプリケーション

3776 ワード

C
サーバは、ユーザにウェブページを送信すると、HTTPのヘッダにクッキーを送信し、ユーザ情報を記録し、ユーザが同じドメイン名にアクセスする内容は、ブラウザがクッキーをサーバに送信する.
O
  • 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つのバージョンがあります.一つはバージョン0とバージョン1(RFC 2965)です.現在ほとんどのサーバが使用しているCookie 0です.
  • Cookieに関する詳細は、「HTTP権威ガイド」の関連する章を参照してください.
  • O
  • NSHTTPCookieは、iOSでNSHTTPCookie類を用いてクッキーをパッケージ化し、NSHTTPCookieの方法でクッキーの汎用性を読み出す.(属性の意味は後で会います)
  • NSDictionary *properties;//    
    NSUInteger version;
    NSString *name;
    NSString *value;
    NSDate *expiresDate;
    BOOL sessionOnly;
    NSString *domain;
    NSString *path;
    BOOL secure;
    BOOL HTTPOnly;
    NSString *comment;
    NSURL *commentURL;
    NSArray *portList;
    
    クッキーは手で処理する必要が少ないですが、アップルのお父さんは便利な作成方法を提供してくれました.
    //             Cookie, 
    + (id)cookieWithProperties:(NSDictionary *)properties;
    - (id)initWithProperties:(NSDictionary *)properties;
    
    //    HTTP cookie header    , 
    //  NSHTTPCookie         HTTP cookie header
    + (NSDictionary *)requestHeaderFieldsWithCookies:(NSArray *)cookies;
    // headerFileds    Cookie    ,  NSHTTPCookie      。      headerFileds  cookie     ,  headerFileds  cookie    domain,   theURL domain,      path,   ”/”.
    + (NSArray *)cookiesWithResponseHeaderFields:(NSDictionary *)headerFields forURL:(NSURL *)theURL;
    
    NSURLRequestがcookieを使用しないことを明確に指定しない限り、URL loading systemは自動的にNSURLRequestに適切なストレージクッキーを送信します.NSURL Resonseから戻ってきたクッキーも、現在のcookieアクセスポリシー(cookie acceptance policy)に従ってシステムに受信されます.
  • NSHT TPCookie Strageリンゴは、クッキーをどのように管理していますか?NSHTTPCookie Storrage単体は、NSHT TPCookieオブジェクトをすべて管理するインターフェースを提供しています.OS Xでは、クッキーはすべてのプログラムで共有されますが、iOSでは、クッキーは現在のアプリケーションでのみ有効です.
  • //  sharedHTTPCookieStorage         NSHTTPCookieStorage    。
    + (NSHTTPCookieStorage *)sharedHTTPCookieStorage];
    //  NSHTTPCookieStorage               cookie
    - (NSArray *)cookies;
    //   URL cookie
    - (NSArray *)cookiesForURL:(NSURL *)theURL];
    //     /  Cookie
    – deleteCookie:;
    – setCookie:;
    – setCookies:forURL:mainDocumentURL:;
    //  NSHTTPCookieStorage   /  cookie    ,   NSHTTPCookieAcceptPolicyAlways.
    - (NSHTTPCookieAcceptPolicy)cookieAcceptPolicy;
    - (void)setCookieAcceptPolicy:(NSHTTPCookieAcceptPolicy)aPolicy;
    
    全部で三つのcookie accept policyがあります.
    typedef enum {
        NSHTTPCookieAcceptPolicyAlways, //    cookie,    .
        NSHTTPCookieAcceptPolicyNever,  //    cookie
        NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain //   main document domain  cookie.
    } NSHTTPCookieAcceptPolicy;
    
    k
    個人的によく使われているのは、name、value、domainの三つの属性です.cookieメカニズムはHTTPプロトコルの標準的な内容ですが、クライアントが手動で処理する必要はありません.しかし、信頼できないバックグラウンドやwebフロントエンドの同僚に会ったら、手動で取り出して彼に伝える必要があります.....取ってもいいです.クライアントが何を言っても計算しません.
    //    domain cookies;
        NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:[NSURL URLWithString:@"http://www.baidu.com"]];
        for (NSHTTPCookie *cookie in cookies) {
            if ([cookie.name isEqualToString:@"yourTokenName"]) {
                return cookie.value; //         cookie ;
            }
        }
    
    i
    Cookie StrageはiOS 8以降、指定日後のクッキーを整理する方法を追加しました.アプリケーション内で再登録またはcasサーバを終了すると、この方法を選択して、cookieを削除し、セッションをオフします.そうでないとcasは重複してログインできません.
    - (void)removeCookiesSinceDate:(NSDate *)date;
    
    e
    もう一つの問題があります.ドメインをまたぐ場合、クッキーはどうすればいいですか?自動的に持ち運びができますか?まだ検討していません.後で更新します.