我有2个应用程序,两个应用程序均使用WKWebview进行SSO登录。两个应用程序都可以单独正常运行。
现在让我们来看看下面的情况。
假设我登录了一个应用程序,从该应用程序检索了WKWebview cookie并在第二个应用程序的WKWebview中设置了该cookie信息。我的期望是SSO应该在第二个应用程序中工作,但它不起作用。
下面是我从第一个应用程序登录后用于从WKwebview检索Cookie的代码
扩展名WKWebView {
@available(iOS 11.0, *) private var httpCookieStore: WKHTTPCookieStore { return WKWebsiteDataStore.default().httpCookieStore } func getCookies(for domain: String? = nil, completion: @escaping ([String : Any])->()) { var cookieDict = [String : AnyObject]() if #available(iOS 11.0, *) { httpCookieStore.getAllCookies { (cookies) in for cookie in cookies { print("cookie iterator started") print("cookie=======\(cookie)") if let domain = domain { if cookie.domain.contains(domain) { cookieDict[cookie.name] = cookie.properties as AnyObject? } } else { cookieDict[cookie.name] = cookie.properties as AnyObject? } } completion(cookieDict) } } else { // Fallback on earlier versions } } }
下面是我用于在第二个应用程序的WKwebview中设置cookie的代码
let cookie= HTTPCookie(properties: [
.domain: "dev.mycompany.net",
.path: "/",
.name: "PF",
.value: "327y48234g2hgdhjwedguyw23oSYVbVLwf9",
.secure: "TRUE",
.version: 1,
.expires: NSDate(timeIntervalSinceNow: (562225018+1000000))
])!
HTTPCookieStorage.shared.cookieAcceptPolicy = HTTPCookie.AcceptPolicy.always
HTTPCookieStorage.shared.setCookie(cookie)
答案 0 :(得分:0)
我觉得您在第二个应用程序 Wkwebview 中做错了自己的Cookie存储。但是您假设这将在 Wkwebview HTTPCookieStorage.shared.setCookie(cookie)
中设置cookie。要在第二个应用 Wkwebview 中设置cookie,您应在中设置已登录Cookie Wkwebview 的> httpcookiestore 。
self.webview.configuration.websiteDataStore.httpCookieStore.setCookie("your http cookie here", completionHandler: {
//在这里做任何您想做的事。现在在wkwebview中设置了cookie
})
使用此方法制作Cookie。
let newcookie = HTTPCookie(properties: [
.domain: "your domain",
.path: "/",
.name: "name",
.value: "value",
.secure: "FALSE",
.expires: NSDate(timeIntervalSinceNow: 31556926)
])!