Ios WKWebView Cookies

Ios WKWebView Cookies,ios,objective-c,wkwebview,wkwebviewconfiguration,Ios,Objective C,Wkwebview,Wkwebviewconfiguration,我使用下面提到的方法在WKWebview中设置cookie: 但是我设置的cookie在AJAX调用中被复制。我的意思是它们被重复了两次 以下是我使用的代码片段: NSString *strURL = DASHBOARDURL; NSURL *url = [NSURL URLWithString:strURL]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; [request setURL:url]

我使用下面提到的方法在
WKWebview
中设置cookie:

但是我设置的cookie在AJAX调用中被复制。我的意思是它们被重复了两次

以下是我使用的代码片段:

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
是一种将cookie值作为
NSString

  • WKWebView
    是否将cookie设置回
    NSHTTPCookieStorage
    运行时(在AJAX调用期间)
  • 我可以用任何委托方法控制AJAX调用cookies吗
  • 下面是我的
    getCookieString
    category(
    NSHTTPCookie(CookieObject)
    )方法


    如果cookie存储中有多个cookie的域(或路径)与请求的URL匹配,则会发送多个cookie


    在编写
    getCookieString
    方法时,您可能更改或添加了字符串的
    domain=
    部分。这将导致存储第二个有效cookie,并随请求一起发送。

    从我的getCookieString方法中删除
    域=
    ,修复了该问题

    -(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;
    }
    

    完美答案..谢谢注意“sessionOnly”和“isSecure”在参数列表中的顺序是错误的。在处理键值对时,顺序真的很重要吗?无论如何,我会尝试一下,并在这里发表评论。事实上,确实如此,因为您没有使用键值对。您正在连接一个字符串。因此sessionOnly=%@;在这种情况下,isSecure=%@应被读取为sessionOnly=+self.isSecure+;IsSecurity=+self.sessionOnly
    -(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;
    }