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的主要内容,如果未能解决你的问题,请参考以下文章

WKWebView 因某些查询而崩溃(iOS Swift)

IOS Swift WkWebview如何屏蔽长按

在 Swift 中使用 WKWebView 进行身份验证

swift 笔记:iOS与JavaScript的交互(三):WKWebView 1.新建WKWebView加载本地,远程页面

在 WKWebView (iOS, Swift) 中使用本地 Javascript 源加载本地 HTML

iOS Swift5.0 WKWebView使用JS与Swift交互