iOSネットワークリクエストのCookie

5488 ワード

最近のプロジェクトではネットワークリクエストに関する知識が用いられており,以前は権限認証に関する知識を簡単に記録して興味のあるものを持って場を捧げることができた.次は本題に入ります.
Cookie
まずクッキーが何なのか簡単に理解しましょう.
私たちが使用するHTTPプロトコルの転送時にデータのインタラクションが完了すると、サービス側とクライアントとの接続がオフになります.クライアントが再びサービス側とデータを交換するときに、すべてが再びやり直される場合は、Cookieを使用する必要があります.
クライアントとサービス側が初めて接続する場合、サービス側はクライアントにCookie(通行証)を発行し、再びサービス側と対話する場合はこのCookie(通行証)を持参する必要があり、サービス側はこのCookie(通行証)を通じて訪問者の身分を確認することができる.例えば栗:ユーザがあるサイトにログイン操作を行うと、サービス側はCookie情報を端末に返信し、端末はこれらの情報を保存し、次回このサイトに再度アクセスすると、端末は保存するCookie情報を一括してサービス側に送信し、サービス側はCookie情報が有効か否かによってこのユーザが自動的にログインできるか否かを判断する.
iOSで使用するNSURLRequestは、セッションごとのCookieを自動的に保存しています.もちろん、保存する必要がない場合は、この属性HTTPShouldHandleCookiesをNOに設定する必要があります.では、私たちが要求するCookieはNSHTTPCookieStorageに存在します.
NSHTTPCookieStorage
このクラスは、HTTPリクエストのCookieをすべて管理する単一の設計モデルを採用しています.では、一般的な方法を見てみましょう.
//       
@property(class, readonly, strong) NSHTTPCookieStorage *sharedHTTPCookieStorage;

//     Cookie   , iOS Cookie      NSHTTPCookie  ,      
@property (nullable , readonly, copy) NSArray *cookies;

//       Cookie
- (void)setCookie:(NSHTTPCookie *)cookie;

//     Cookie
- (void)deleteCookie:(NSHTTPCookie *)cookie;

//            Cookie(iOS 8    )
- (void)removeCookiesSinceDate:(NSDate *)date;

//     Url     Url    Cookie
- (nullable NSArray *)cookiesForURL:(NSURL *)URL;

// Cookie       ,    
@property NSHTTPCookieAcceptPolicy cookieAcceptPolicy;
typedef NS_ENUM(NSUInteger, NSHTTPCookieAcceptPolicy) {
    //      Cookie
    NSHTTPCookieAcceptPolicyAlways,
    //    Cookie
    NSHTTPCookieAcceptPolicyNever,
    //       Cookie
    NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain
};

//       cookieAcceptPolicy NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain      
- (void)setCookies:(NSArray *)cookies forURL:(nullable NSURL *)URL mainDocumentURL:(nullable NSURL *)mainDocumentURL;

NSHTTPCookie
CookieはiOSシステムでNSHTTPCookieオブジェクトにカプセル化されています.次に、このクラスの使用方法を簡単に紹介します.
//                              
- (nullable instancetype)initWithProperties:(NSDictionary *)properties;
+ (nullable NSHTTPCookie *)cookieWithProperties:(NSDictionary *)properties;

//  Cookie        HTTP      
+ (NSDictionary *)requestHeaderFieldsWithCookies:(NSArray *)cookies;

//        URL      Cookie  
+ (NSArray *)cookiesWithResponseHeaderFields:(NSDictionary *)headerFields forURL:(NSURL *)URL;

//Cookie        
@property (nullable, readonly, copy) NSDictionary *properties;

//       
@property (readonly) NSUInteger version;

//       
@property (readonly, copy) NSString *name;

//      
@property (readonly, copy) NSString *value;

//   YES session       ,NO         
@property (readonly, getter=isSessionOnly) BOOL sessionOnly;

//    
@property (nullable, readonly, copy) NSDate *expiresDate;

//     
@property (readonly, copy) NSString *domain;

//     
@property (readonly, copy) NSString *path;

//       
@property (readonly, getter=isSecure) BOOL secure;

//     HTTP   
@property (readonly, getter=isHTTPOnly) BOOL HTTPOnly;

//     
@property (nullable, readonly, copy) NSString *comment;

//          Cookie   Url  
@property (nullable, readonly, copy) NSURL *commentURL;

//      
@property (nullable, readonly, copy) NSArray *portList;

この2つのクラスに基づいて、リクエスト中のCookieを管理することができます.
私たちは「http://www.baidu.com「例として、これらのものを見てみましょう.
ステップ1:リクエストを作成します
    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[[NSOperationQueue alloc] init]];
    
    NSURLSessionDataTask *task = [session dataTaskWithURL:[NSURL URLWithString:@"http://www.baidu.com"]];
    [task resume];

ステップ2:リクエストが完了したら画面をクリックしてクッキーを取得
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSHTTPCookieStorage *storeage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
    NSLog(@"%@",storeage.cookies);
}

      :
<__nsarraym>(
,
,
,
,
,

)

文章はここで終わります.辛抱強く見てくれてありがとう.