iOS Swift WKWebView 维护用户会话 Cookie
Posted
技术标签:
【中文标题】iOS Swift WKWebView 维护用户会话 Cookie【英文标题】:iOS Swift WKWebView Maintain User Session Cookies 【发布时间】:2018-01-30 04:14:07 【问题描述】:我知道这个问题已经以几种相关的形式得到了回答,但是我已经绞尽脑汁想弄清楚这几天,但无济于事。我已经尝试了每一个我能找到的似乎与远程相关的解决方案。
我正在使用WKWebView
并加载网站的网址。在该网站上,用户将登录。为了让用户保持登录状态,我们需要使用 cookie 来维护会话。我已经在 android 上完美运行(使用 webview 和 cookie)。
我需要为 ios 解决以下问题:
1) 如何找到 cookie(如果它已经存在)并使用URLRequest
发送。
2) 如何确保在打开和关闭应用程序之间维护 cookie。
【问题讨论】:
我也面临这个问题,现在解决了吗? 我确实设法解决了这个问题。部分是我自己的愚蠢。当我有机会时会发布我的答案......希望会有用。 @gdd 您是否最终发布了答案或者它没有用?看到我几天来一直被同样的情况困住,我有点不知所措。我为 Android 开发了我的应用程序,现在我正在应用相同的逻辑来开发适用于 iOS 的应用程序(请注意,从头开始),但到目前为止,这是最让我退缩的原因。 【参考方案1】:好的,几个月后回到这个:/
这非常简单。在我嵌入 WKWebView 的网站的登录页面中,我没有点击“记住我”复选框。我陷入了整个兔子洞,认为这与网站的 cookie/s 从未被保存有关,但我从未真正指示它这样做。
希望对任何人都有帮助。我的脸因多次面部护理而瘀伤。
【讨论】:
OH MY GOD 这是它哈哈! 大声笑,我也有同感:)【参考方案2】:此代码对我有用 -
在 ViewDidLoad 方法中添加这段代码
let preferences = WKPreferences()
preferences.javascriptEnabled = true
preferences.javaScriptCanOpenWindowsAutomatically = true
let wkUController = WKUserContentController()
let cookieScript = WKUserScript(source: "document.cookie = 'Set-Cookie: sessionId =\(Defaults[AppConstants.UD_SESSION_ID].string!)';", injectionTime: WKUserScriptInjectionTime.atDocumentStart, forMainFrameOnly: false)
wkUController.addUserScript(cookieScript)
let wkWebConfig = WKWebViewConfiguration()
wkWebConfig.userContentController = wkUController
wkWebConfig.preferences = preferences
// Adding webview
webView = WKWebView(frame: self.view.bounds, configuration: wkWebConfig)
var request = URLRequest(url: url)
request.addValue("Set-Cookie: sessionId = \(Defaults[AppConstants.UD_SESSION_ID].string!)", forHTTPHeaderField: "Cookie")
webView?.load(request)
【讨论】:
以上是关于iOS Swift WKWebView 维护用户会话 Cookie的主要内容,如果未能解决你的问题,请参考以下文章
swift 笔记:iOS与JavaScript的交互(三):WKWebView 1.新建WKWebView加载本地,远程页面