问题标签 [wkhttpcookiestore]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios11 - WKHTTPCookieStore 未检索设置的 Cookie。
我正在尝试以编程方式设置 cookie,但它不起作用。cookie 给人的印象是它是有效的。然后我把它设置在WKWebsiteDataStore.default().httpCookieStore
. 在异步回调中,我尝试将所有 cookie 从存储中取出。但是,我的 cookie 不存在。去哪儿了!?
ios - WKHTTPCookieStorage 的 setCookie 在关闭和打开 Web 视图后不返回
我有下面的代码将 cookie 从 general 复制HTTPCookieStorage
到我的 webview 的 cookie 存储中。复制所有 cookie 后,我加载 webview
这段代码第一次运行时就可以工作——所有的 cookie 都被设置,setCookie
完成处理程序被调用并且调度组被通知。
但是,在关闭此 Web 视图并打开它setCookie
的 n 次运行(通常是 3 或 4 次)之后,完成处理程序会停止返回,通常是无限期地返回。有一些竞争条件正在发生,因为如果我设置断点并在每次 web 视图打开时点击它们,这个问题就永远不会发生。发生一次后,设置断点有时会使其重新开始工作,有时什么也不做。
注意:这只发生在设备上。在模拟器上,这永远不会发生。
没有关于setCookie
completionHandler 何时应该返回或不返回的文档,而且这是一个竞争条件,当你有断点时通常不会发生这种情况,这使得调试变得异常困难。
有没有其他人经历过这个?有什么建议吗?我尝试在几个地方明确设置 WKProcessPool,但没有成功。我尝试在创建配置之前和之后创建 Web 视图。我已经尝试了很多东西,但仍然失败了
swift - WKWebView 在模拟器上首次加载时始终未经身份验证 - 然后在所有后续加载时都经过身份验证
在我的应用程序中,我正在加载一个需要在 WKWebView 中进行身份验证的页面。在设备上,它总是在首次加载时进行身份验证,因为我有适当的 cookie 来对其进行身份验证。但是,如果我在模拟器上“擦除所有内容设置”(在顶部栏中的“硬件”菜单下),那么 Web 视图的第一次加载总是未经身份验证的(即使我有正确的 cookie),随后的加载是始终经过身份验证。
这不会在设备上发生,并且在我设置断点时也不会发生,这意味着它是某种与模拟器相关的竞争条件。
这是我用于从我的 Web 视图中从常规 cookie 存储更新 cookie 的代码。
我在这里做错了吗?这是关于我的身份验证 cookie 是“HTTPOnly”而 WebKit 没有正确处理它们的问题吗?其他人遇到过这个问题吗?
ios - WKWebview getAllCookies 在 iOS 11.3 中崩溃
我们最近迁移到了 WKWebview。我们为 cookie 更改添加了一个监听器,以获取更新的 cookie 并更新我们自己的商店。
加载控制器后,它会调用 cookiesDidChangeInCookieStore 并在“getAllCookies”处崩溃。但这种崩溃仅发生在 TestFlight/Fabric 构建中。当我从 xcode 直接在设备上运行应用程序时(在调试和发布模式下)不会发生。以下是崩溃报告,
调用 getAllCookies 时似乎存在溢出。这仅在 iOS 11.3 中发生。
ios - WKHTTPCookieStore getAllCookies 崩溃
我打电话时发生了奇怪的崩溃getAllCookies()
崩溃只能在装有 iOS 11.3.1 的真实设备上重现。在模拟器上工作正常。
Xcode 控制台中的崩溃说:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSURL length]: unrecognized selector sent to instance 0x10fc42790'
Crashlytics 上的崩溃:
在主线程中异步调用getAllCookies,不解决问题。
ios - WKWebView 无法设置 Cookie (iOS 11+)
我正在拼命地尝试将自定义 cookie 添加到WKWebView
实例中(不使用 Javascript 或类似的解决方法)。
从 iOS 11 及更高版本开始,Apple 提供了一个 API 来执行此操作:WKWebView
sWKWebsiteDataStore
有一个 property httpCookieStore
。
这是我的(示例)代码:
在此之后,如果我使用webView.configuration.websiteDataStore.httpCookieStore.getAllCookies(completionHandler:)
我会看到我的 cookie 在 cookie 列表中。
但是,当使用 Safari 的开发工具(当然是使用 iOS 模拟器)检查 webview 时,cookie 不会显示。
我还尝试使用 HTTP 代理(在我的例子中为 Charles)检查流量,以查看我的 HTTP 请求中是否包含 cookie。它不是。
我在这里做错了什么?如何将 cookie 添加到WKWebView
(在 iOS 11 及更高版本上)?
ios - 在某些操作系统版本中未调用 WKHTTPCookieStore getAllCookies 完成处理程序
我们的 iOS 应用程序从中读取 cookieWKHTTPCookieStore
以调用初始化 Web 服务。如果我们要查找的特定 cookie 不存在于 CookieStore 中,则将在 web 服务中传递空值并返回相关响应。由于这是一个初始化 API,我们在完成处理程序中调用 web 服务,如下所示,并通过添加活动指示器来阻止 UI,直到它给出成功或失败。
在我们的测试中,它在从 iOS 11.3 到 12.2 的所有可用测试设备上运行良好。
当前的问题是生产应用程序有一个奇怪的行为,即活动指示器在安装后根本没有消失。我们发现根本原因是WKHTTPCookieStore.getAllCookies
完成处理程序从未被调用,因此它阻塞了 UI。该问题主要在 iOS 11.2.x 操作系统版本中观察到,但不确定它是否也会影响任何其他操作系统版本。即使重新启动应用程序也不能解决问题。
有没有人遇到过这个问题?有什么解决方法/解决方法可以解决这个问题吗?
session-cookies - 为什么WKHTTPCookieStore的API——getAllCookies调用了completionHandler却没有session cookies包含
WKNavigationResponse 在 iOS 12 中不再通过其 response.header 提供对 cookie 的访问,
所以,我必须使用新的 API 来获取所有的 cookie。当我使用时getAllCookies:
,有时它没有调用completionHandler,有时它调用了没有会话cookie 包含的completionHandler。在某些情况下,我需要获取会话 cookie。
为什么WKHTTPCookieStore的API——getAllCookies总是不能调用completionHandler?还有,为什么有时候调用completionHandler却没有session cookies包含?
或者,有没有办法从 WKWebView 获取所有包含会话 cookie 的 cookie?
swift - 如何使用 WKWebView / WKHTTPCookieStore 在应用重新启动时保留 cookie
我需要在应用程序重新启动时保留我的 cookie。
最初在使用时,UIWebView
我可以通过扩展来实现这一点UserDefaults
然后我会在各种生命周期方法中调用它
但是现在我的应用程序正在使用WKWebView
并且我有相同的要求。我目前通过共享单例在我的应用程序中的不同 Web 视图之间共享 cookie 存储WKProcessPool
但是,在重新启动时,某些 cookie 不会保留。主要是没有exp
日期且无法在服务器上更新以拥有日期的 cookie。
上面的扩展正在使用,HTTPCookieStorage
但是我需要使用相同的方式(或更好的方式)来实现某些东西,但我WKHTTPCookieStore
不确定如何使用。
我希望做这样的事情
但我不相信WKHTTPCookieStore
可以以这种方式调用。
我也非常了解 cookie 等敏感数据的问题UserDefaults
,这不是一个生产应用程序,并且在发布之前很久就会删除此功能并替换为适当、安全的解决方案。遗憾的是,这正是我们目前使用产品的地方。
ios - WKWebView 在 WKHTTPCookieStore 中设置 cookie 时不更新 document.cookie
上下文:
我有一个 iOS Cordova 应用程序,使用WKWebView
. 我需要拦截WKWebView
使用方案不可能的请求http|https
(可以使用UIWebView
但我必须移动到WKWebView
)。因此我在科尔多瓦的config.xml
并且我已配置WKWebView
为处理(拦截)xyz://
方案:
将 Safari 检查器附加到我的 iPhonedocument.origin
输出后xyz://host.domain.com
。
假设 a使用以下标头GET
进行响应:https://host.domain.com/app/foo
使用我从上面NSURLSessionDataTask
的GET
响应头https://host.domain.com/app/foo
构建NSHTTPCookie
对象并将它们存储在我的使用中Set-Cookie
WKHTTPCookieStore
WKWebView
按照这个答案。cookie 已正确设置并且可以使用
有趣的一点:
设置 cookie 后,我将 Safari 检查器附加到我的 iPhone 并:
- Cookie
a=1
在 Safari 检查器的存储中显示 - Cookie
b=2
并且c=3
不显示在 Safari 检查器的存储中 document.cookie
总是返回""
(JS 无法访问 cookie)
问题 #1: 为什么a=1
Safari 检查器的存储部分中只显示 cookie?
我期待看到所有的饼干。它似乎与Secure
标志有关,但可能是 Safari 检查器中的错误(或功能),因为在 Google Chrome 上检查随机站点会显示所有 cookie,而不管Secure
标志如何。
问题#2:
为什么document.cookie
总是返回""
?
即使document.cookie="foo=bar; expires=Tue, 14 Oct 2024 20:23:32 GMT; domain=host.domain.com; path=/"
直接在检查器中执行,document.cookie
仍然返回""
,就像由于某种原因它是只读的一样。
UIWebView
使用,NSHTTPCookieStorage
和标准https
方案一切正常。我在这方面完全不知所措。我能找到的唯一类似的问题是这个和这个,但没有运气。
我在这里错过了一些非常明显的东西吗?
TL;DR
iOS Cordova 应用程序使用WKWebView
和自定义 url 方案不会将本机代码中设置的 cookie 公开给 JavaScript(document.cookie
总是""
)。