Ruby on rails WkWebView有时会丢失会话变量

Ruby on rails WkWebView有时会丢失会话变量,ruby-on-rails,swift,session-cookies,wkwebview,Ruby On Rails,Swift,Session Cookies,Wkwebview,我有一个RubyonRails后端web应用程序。我使用iOS应用程序作为用swift编写的web客户端(WKWebView)。身份验证令牌作为会话cookies变量存储在后端: session['token']=生成令牌 问题是,此会话变量意外丢失,流被重定向到登录页面。 WKWebView不是关闭的,只是用于处理HTTP请求。 我不明白为什么会发生这种意外 由于您只使用webView,而不是默认的Safari浏览器,这意味着您正在创建自定义浏览器,因此您有责任处理诸如为当前会话缓存令牌之类的

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

session['token']=生成令牌

问题是,此会话变量意外丢失,流被重定向到登录页面。 WKWebView不是关闭的,只是用于处理HTTP请求。
我不明白为什么会发生这种意外

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

let accessToken = "your json web token"
然后在向服务器发出请求时将其作为标头传递

如果您希望维护访问权限,那么您可能希望根据安全级别将令牌保存在keyChain或userDefaults中

导航和其他用户交互

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


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

你在数据库中存储令牌吗?是的,我在。在处理每个请求之前,我将DB中的令牌与会话['token']进行比较。我可以在WKWebView中加载的第一个请求中进行比较。但是,在点击网站上的http链接后调用的另一个请求呢?我已经编辑了我的答案,以包含关于如何处理此类情况的更多细节。我正在处理webView,我刚刚找到了这篇文章。也许它也会对你有用@彼得博格