2016-06-16 10 views
1

ich die unten genannten Ansatz, Cookies setzen in einem WKWebview: Can I set the cookies to be used by a WKWebView?WKWebView Plätzchen

Aber die Cookies, die ich gesetzt haben werden in der AJAX dupliziert aufruft. Ich meine, sie werden zweimal wiederholt. Hier

ist der Code-Schnipsel, die ich verwendet:

NSString *strURL = DASHBOARDURL;  
NSURL *url = [NSURL URLWithString:strURL]; 
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
[request setURL:url]; 

NSMutableString *script = [[NSMutableString alloc] init]; 
NSMutableString *cookieString = [[NSMutableString alloc] init]; 

for (NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) { 
    [script appendString:[NSString stringWithFormat:@"document.cookie='%@';",cookie.getCookieString]]; 
    [cookieString appendString:[NSString stringWithFormat:@"%@;", cookie.getCookieString]]; 
} 
[request setValue:cookieString forHTTPHeaderField:@"Cookie"]; 

//cookies for further AJAX calls 
WKUserContentController *userContentController = [[WKUserContentController alloc] init]; 
WKUserScript *cookieInScript = [[WKUserScript alloc] initWithSource:script 
                 injectionTime:WKUserScriptInjectionTimeAtDocumentStart 
                forMainFrameOnly:YES]; 
[userContentController addUserScript:cookieInScript]; 

WKWebViewConfiguration *webViewConfig = [[WKWebViewConfiguration alloc] init]; 
webViewConfig.userContentController = userContentController; 

CGRect viewRect = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y, self.view.frame.size.width, self.view.frame.size.height); 

wkWebview = [[WKWebView alloc] initWithFrame:viewRect configuration:webViewConfig]; 
wkWebview.navigationDelegate = self; 
[wkWebview loadRequest:request]; 
[self.view addSubview:wkWebview]; 

getCookieString ist eine Methode, die Cookie-Werte als NSString

  1. Wird die WKWebView setzen die Cookies wieder zu NSHTTPCookieStorage zur Laufzeit zurückgibt (Während AJAX-Anrufen)
  2. Kann ich AJAX-Cookies mit allen Delegate-Methoden steuern?

Hier finden Sie meine getCookieString Kategorie (NSHTTPCookie (CookieObject)) Methode

- (NSString *)getCookieString { 

    NSString *string = [NSString stringWithFormat:@"%@=%@;domain=%@;expiresDate=%@;path=%@;sessionOnly=%@;isSecure=%@", 
        self.name, 
        self.value, 
        self.domain, 
        self.expiresDate, 
        self.path ?: @"/", 
        self.isSecure ? @"TRUE":@"FALSE", 
        self.sessionOnly ? @"TRUE":@"FALSE"]; 

    return string; 
} 
+0

Beachten Sie, dass "sessionOnly" und "isSecure" in falscher Reihenfolge in der Argumentliste ist. – gyimi

+0

Ist die Reihenfolge wirklich wichtig, wenn es sich um Schlüsselwertpaare handelt? Wie auch immer, ich werde es versuchen und hier kommentieren. –

+0

Actuallty, tut es, da Sie Schlüsselwert-Paare nicht verwenden. Sie verketten eine Zeichenfolge. Daher sollte sessionOnly =% @; isSecure =% @ in diesem Fall als sessionOnly = + self.isSecure + gelesen werden; isSecure = + self.sessionOnly – gyimi

Antwort

1

mehrere Cookies gesendet werden, wenn es mehr als ein Cookie in der Cookie-Speicher, deren Domänen (oder Pfade) sind entsprechen die angeforderte URL.

Während Sie Ihre getCookieString-Methode geschrieben haben, haben Sie möglicherweise den domain= Teil der Zeichenfolge geändert oder hinzugefügt. Dies würde dazu führen, dass ein zweiter gültiger Cookie gespeichert und somit mit Ihrer Anfrage gesendet wird.

+0

Perfekte Antwort..Vielen Dank –

0

domain= von meinem getCookieString Methode Entfernen das Problem behoben

-(NSString *)getCookieString 
{ 
    NSString *string = [NSString stringWithFormat:@"%@=%@;expiresDate=%@;path=%@;sessionOnly=%@;isSecure=%@", 
      self.name, 
      self.value, 
      self.expiresDate, 
      self.path ?: @"/", 
      self.isSecure ? @"TRUE":@"FALSE", 
      self.sessionOnly ? @"TRUE":@"FALSE"]; 
    return string; 
}