iOSとH5ページの相互作用(WKWebviewとのUIWebViewクッキーの設定)

iOSとH5ページの相互作用(WKWebviewとのUIWebViewクッキーの設定)

クッキーに関連したピットの主な記録

1.のUIWebView

比較的簡単1.のUIWebViewはNSHTTPCookieStorageクッキーを設定することによって達成することができます。

コードセクション

```
  NSURL *cookieHost = [NSURL URLWithString:self.domain];
// 设定 cookie
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:
                        [NSDictionary dictionaryWithObjectsAndKeys:
                         [cookieHost host], NSHTTPCookieDomain,
                         [cookieHost path], NSHTTPCookiePath,
                         self.cookieKey,  NSHTTPCookieName,
                         self.cookieValue, NSHTTPCookieValue,
                         nil]];
// 加入cookie
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
```

必要な場合は、HTTPRequest要求することにより、第1の時間内に設けられた2 setValueForKey headerValueの

2. WKWebview

WKWebviewを使用している場合も2例に合格する必要があります。

  • バックエンドPHPなど1.HTTPRequestリクエストURLは、クッキーを実施し得るとき
  • 2.塗りつぶしjsの目標は、過去のjsを渡すために、初期化時にWKWebviewでdocument.cookieを設定することにより、クッキーの内側フロントページから取得することです

    `WKUserScript * cookieScript = [[WKUserScript alloc] initWithSource: cookieValue injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO];

  • 私たちはこのクッキーを通過しないので3.NSHTTPCookieStorageは、何の問題を運ばないようではありません

オンラインリファレンス誰か他の人の方法は、以下のステップを実装することですが、私たちは、これらの3つのプロジェクトと必要な方法に従っていませんでしたが、参照することができます:

WKWebview 3つのステップ:(1)iOS11、WKHTTPCookieStoreは直接渡さ。(2)iOS8-iOS10、JS注射;クッキーを運ぶ(3)PHPの方法(これはiOS11によってサポートされている場合にのみ、次の2つの手順ができません)

関連するコード

#pragma mark - WKWebview
// iOS11
- (void)setWkCookie:(WKWebView *)wkWebview completionHandler:(nullable void (^)(void))comple {
    
    NSURL *cookieHost = [NSURL URLWithString:self.domain];
    // 设定 cookie
    NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:
                            [NSDictionary dictionaryWithObjectsAndKeys:
                             [cookieHost host], NSHTTPCookieDomain,
                             [cookieHost path], NSHTTPCookiePath,
                             self.cookieKey,  NSHTTPCookieName,
                             self.cookieValue, NSHTTPCookieValue,
                             //                             [NSDate dateWithTimeIntervalSinceNow:30*60*60],NSHTTPCookieExpires,
                             nil]];
    
    // 加入cookie
    //发送请求前插入cookie;
    if (@available(iOS 11.0, *)) {
        WKHTTPCookieStore *cookieStore = wkWebview.configuration.websiteDataStore.httpCookieStore;
        [cookieStore setCookie:cookie completionHandler:^{
            
            comple?comple():nil;
        }];
    } else {
        
        
    }

}

// JS携带cookie的形式
- (void)setWkJsCookie:(WKUserContentController *)userContentController {
    // 单个cookie,多个的话,再加上document.cookie ='%@=%@';一次
    NSString *cookieStr = [NSString stringWithFormat:@"document.cookie ='%@=%@';",self.cookieKey,self.cookieValue];
    WKUserScript * cookieScript = [[WKUserScript alloc] initWithSource: cookieStr injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO];
    [userContentController addUserScript:cookieScript];
}

// PHP携带cookie的形式
- (void)setWkPHPCookie:(NSMutableURLRequest *)request {
    //通过host关联cookie。
    NSMutableDictionary *cookieDic = [NSMutableDictionary dictionary];
    NSMutableString *cookieValue = [NSMutableString stringWithFormat:@""];
    NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
    for (NSHTTPCookie *cookie in [cookieStorage cookies]) {
        [cookieDic setObject:cookie.value forKey:cookie.name];
    }
    if ([cookieDic objectForKey:[CookieManager shareInstance].cookieKey]) {
        [cookieDic removeObjectForKey:[CookieManager shareInstance].cookieKey];
    }
    
    // cookie重复,先放到字典进行去重,再进行拼接
    for (NSString *key in cookieDic) {
        NSString *appendString = [NSString stringWithFormat:@"%@=%@;", key, [cookieDic valueForKey:key]];
        [cookieValue appendString:appendString];
    }
    
    [cookieValue appendString:[NSString stringWithFormat:@"%@ = %@;",self.cookieKey,self.cookieValue]];
    [request addValue:cookieValue forHTTPHeaderField:@"Cookie"];
}

#pragma mark - Webview
// 客户端添加cookie
- (void)setWebCookie {
    
    NSURL *cookieHost = [NSURL URLWithString:self.domain];
    // 设定 cookie
    NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:
                            [NSDictionary dictionaryWithObjectsAndKeys:
                             [cookieHost host], NSHTTPCookieDomain,
                             [cookieHost path], NSHTTPCookiePath,
                             self.cookieKey,  NSHTTPCookieName,
                             self.cookieValue, NSHTTPCookieValue,
                             nil]];
    // 加入cookie
    [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
}

クロスドメインの問題を抱えている2.WKWebview

*ではなく、少なくとも最後には、クロスドメイン方式の問題は、私たちは言葉を考えた場合、のUIWebViewは発生しませんが、WKWebviewが、これはAppleが、アカウントのセキュリティ面を考慮され、ドメイン間で許可されていませんが、現在では、対処することができている私たちのプログラムは、2つです

ファジー植え付け.xxx.com介して、取得することにより、クッキー後クッキーの前端に植え替え1

2.このようなユーザ関連情報としてバックエンド処理は、先端UIDに渡すことができましょう。

おすすめ

転載: www.cnblogs.com/keyan1102/p/11729795.html