【问题标题】:WkWebView sometimes loses the session variableWkWebView 有时会丢失会话变量
【发布时间】:2019-09-17 21:43:48
【问题描述】:

我有一个 Ruby on Rails 后端 Web 应用程序。我使用 iOS 应用程序作为用 swift 编写的 Web 客户端 (WKWebView)。身份验证令牌作为会话 cookie 变量存储在后端:

session['token'] = generate_token

问题是这个会话变量意外丢失并且流程被重定向到登录页面。 WKWebView 没有关闭,只是用来处理 HTTP 请求。 我无法弄清楚,为什么会意外发生。

【问题讨论】:

  • 您是否将令牌存储在数据库中?
  • 是的,我是。在处理每个请求之前,我将 DB 中的令牌与 session['token'] 进行比较。

标签: ruby-on-rails swift session-cookies wkwebview


【解决方案1】:

由于您只使用 webView 而不是默认的 Safari 浏览器,这意味着您正在制作自定义浏览器,因此您有责任处理诸如缓存当前会话的令牌之类的事情。我的建议,如果您希望令牌仅存储和使用一次,请创建一个类似的变量

let accessToken = "your json web token"

然后在向您的服务器发出请求时将其作为标头传递。

如果您想保持访问权限,那么您可能需要将令牌保存在 keyChain 或 userDefaults 中,具体取决于安全级别。

导航和其他用户交互

正如我所提到的,使用 wkwebView 意味着您正在制作自己的浏览器,因此您必须在用户与您的网页交互时检测后续请求。对于导航,您必须使用WKNavigationDelegate 方法。

如果 WKNavigationDelegate 不能解决您的问题,那么您必须使用 Javascript 事件,即.. 在用户访问某个页面时发布事件并使用 WKScriptMessageHandler 通过传递来响应这些事件访问令牌等。

【讨论】:

  • 我可以在 WKWebView 中加载的第一个请求中做到这一点。但是另外一个请求,在点击网站上的 http 链接后调用呢?
  • 我已经编辑了我的答案,以包含有关如何处理此类情况的更多详细信息。
  • 我在做webView,我刚找到这篇文章novemberfive.co/blog/WKWebView-redirect-with-cookies。也许它对你也有用。 @PeterBalogh
猜你喜欢
  • 2011-04-15
  • 2011-12-05
  • 2011-03-09
  • 2012-10-18
  • 1970-01-01
  • 2012-01-10
  • 2020-01-09
  • 1970-01-01
相关资源
最近更新 更多