WKWebview注入cookie头导致重定向循环

2023-12-31

我试图将我单独获取的会话cookie注入到WKWebview请求中,结果证明这是相当痛苦的......

我设法使用注入会话cookie这个解决方案 https://stackoverflow.com/questions/26573137/can-i-set-the-cookies-to-be-used-by-a-wkwebview/26577303#26577303, 如下:

// Acquiring the cookies
let cookies = HTTPCookie.cookies(withResponseHeaderFields: headers, for: s.request!.url!)

//Appending all the cookies into one raw string.
var cookiesRawString = ""
for c in cookies {
   cookiesRawString += "\(c.name)=\(c.value); "
}

var req: URLRequest = try! URLRequest(url: URL, method: method)

// Then the injection itself
request.setValue(cookiesRawString, forHTTPHeaderField: "Cookie")

webView.load(req)

让我用伪代码快速解释一下服务器逻辑:

  1. 服务器接收对端点的调用/端点1附加初始会话 cookie
  2. 然后继续将客户端重定向到/端点2用户生成的令牌附加在 url 中。
  3. 请求附加令牌的第二个端点将导致最终重定向到/端点3带有包含一次性会话 cookie 的 Set-Cookie 标头
  4. /端点3附加一次性会话 cookie 会导致 200 响应,并且用户被识别。

问题是,由于某种原因,当我使用上面的方法将 cookie 添加到初始请求时,会导致重定向循环,而在 Android 平台上它可以完美地工作(我在那里使用了类似的注入方法)。

我看到它们之间唯一的区别是 Android 应用程序注入了 cookie仅根据最初的请求,并且所有后续重定向调用都没有这些会话 cookie。 虽然ios在所有重定向调用上重复初始会话 cookie(甚至忽略服务器 set-cookie 标头并附加初始会话 cookie..)。

难道我做错了什么?如何使 wkwebview 仅在初始请求时使用注入的 cookie?

编辑1:也尝试回退到UIWebview,但它产生相同的结果,似乎将cookies作为标头注入不好,但我尝试使用HTTPCookieStorage,但它不会保存cookie!

// the count is 7
var cookiesCount = HTTPCookieStorage.shared.cookies(for: s.request!.url!)?.count

let cookies = HTTPCookie.cookies(withResponseHeaderFields: headers, for: s.request!.url!)

for c in cookies {
   HTTPCookieStorage.shared.setCookie(c)
}

// Count is still 7!            
cookiesCount = HTTPCookieStorage.shared.cookies(for: s.request!.url!)?.count

编辑2: 好吧,我发现 UIWebview 使用 cookie 存储的全局实例,与 alamofire 相同(我用它来获取会话 cookie),因此无需手动添加 cookie,该网站可以识别用户。

但我仍然更喜欢使用 WKWebview,因为 UIWebview 内存泄漏猛增(几个网页导航后超过 100 MB!)。

有没有办法在 WKWebview 中使用全局 cookie jar(由 alamofire 使用)?


我认为这可能是无关的,但我有类似的问题。

原因是修改后的 cookie 搞乱了我使用 NSURL.sharedSession 的所有后续请求。事实证明,使用 WKWebView 设置的 cookie 清除了 NSURLSession.sharedSession 中的标头。我认为 cookie 存储是在多个会话之间共享的。所以,我最终使用 EphemeralSession,而不是共享Session。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WKWebview注入cookie头导致重定向循环 的相关文章

随机推荐