问题标签 [nshttpcookiestorage]

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.

0 投票
1 回答
3396 浏览

swift - UIWebView 之间不维护会话

在我的应用程序中,我试图通过 UIWebView 登录用户。成功登录后,cookie 会设置在NSHTTPCookieStorage. 我的应用页面很少在 UIWebView 中打开。

当发送特定网页的请求时,它会根据 cookie 检查用户是否登录。

我检查了 cookie 中是否存在 cookie NSHTTPCookieStorage,但它们不是服务器上的有效 cookie。也就是说,它将用户视为已注销的用户。

我加载 UIWebView 的代码如下:

即使我尝试NSURLSession将 cookie 设置为 HTTPHeaderField。下面是我的代码:

在少数情况下它可以正常工作。我无法找到 cookie 可能存在的问题。

任何帮助将不胜感激。

提前致谢

0 投票
1 回答
5282 浏览

swift - 删除所有缓存和 Cookie,重置整个应用程序

我正在尝试构建一个具有 UIWebView 的应用程序。当我退出我的应用程序时,我希望重置所有数据,包括缓存和 cookie。

我目前能够删除 cookie(可能还有缓存),但问题是即使在删除之后,一些网站似乎也有以前活动的数据。

这是我用来清除 cookie 和缓存的代码:

这似乎适用于大多数网站,但即使在删除 cookie 并删除所有缓存之后,谷歌也不会停止显示我的搜索历史记录。我没有登录谷歌。

我将不胜感激任何帮助!

示例截图:谷歌搜索历史

0 投票
0 回答
1526 浏览

ios - WKWebview 丢失登录 cookie

我目前对使用 WKWebView 显示网页的混合应用程序有疑问。

应用程序重新启动并创建新会话/WKWebWiew 后,Web 服务会为 WKWebView 提供一个新的登录 cookie。这在三分之二的尝试中都可以正常工作,但在某些情况下,登录 cookie 不会存储在 WKWebView (NSHTTPCookieStorage) 使用的共享 cookie 存储中。

(使用与 UIWebview 相同的 web 服务可以正常工作)

我尝试了网络分析工具,我可以看到网络服务正在向我发送新的 cookie。出于某种原因,WKWebView / NSURLRequest 不存储更新的登录 cookie。我读过 WKWebView 似乎会按预定的时间间隔更新 cookie,您可以通过更新 WKProcessPool 来强制它更新,但没有成功。

我一直在尝试使用以下方法从 Web 服务中读取登录 cookie:

但由于某种原因,会话 cookie/登录 cookie 在标题中不可见,我的猜测是由于某种原因它被 NSURL 隐藏,因为如果我通过设置关闭自动 Cookie 处理,我可以看到它们:

然而,它确实给了我很多其他问题......

有没有人有类似的问题或任何意见?

0 投票
2 回答
1196 浏览

objective-c - AFNetworking 和 UIWebView 之间的共享会话

AFNetworking是否可以与 UIWebView共享会话?我曾经AFNetworking登录到远程服务器,但 UIWebView 不知道会话是由AFNetworking?

0 投票
3 回答
1060 浏览

ios - NSHTTPCookieStorage 用于相同的 URL 但不同的用户

可能这是一个愚蠢的问题,但我想为相同的 url 存储 cookie,但为用户名存储不同的 cookie。如何使用 NSHTTPCookieStorage 来实现?这就是我从响应中存储 cookie 的方式。

0 投票
1 回答
2443 浏览

ios - 更新 WKWebView Cookie 值

我的要求是更新设置为WKWebView. 我可以更新 cookie NSHTTPCookieStorage,但相同的 cookie 不会反映到WKWebViewcookie(更新值存在NSHTTPCookieStorage但未设置为WKWebView

以下是我用来将该 cookie 设置为 AJAX 调用的代码。

更新 cookie 后,我尝试在我的 NSHTTPCookieStorage 中打印现有的 cookie,它显示了更新的值。

我还尝试在更新 cookie 后打印脚本WKNavigationDelegate,但它显示旧值。

0 投票
0 回答
1833 浏览

ios - WKWebView 未正确处理“Set-Cookie”标头

我在我的项目中使用 WKWebView 来实现基于 Web 的授权 UI。我使用 [NSHTTPCookieStorage sharedHTTPCookieStorage] 来保留整个应用程序的用户会话 cookie,并在 WKWebView 重定向到我们的后端页面的情况下保持用户身份验证。

问题在于,在这种情况下,WKWebView 似乎忽略了其他域的“Set-Cookie”标头。例如:

设置身份验证过程的初始请求:

这个请求的结果是重定向到目标服务登录页面,我们在下面列出了请求:

在这里,我们看到 Set-Cookie 标头。我希望在 api.misfitwearables.com 本身发出的下一个重定向请求中看到这个 cookie。但我在这里看到的是下一个:

我已经通过独立 Safari 的相同测试,并且所有行为都符合我的预期。

我不明白是什么能够以这种方式影响 WKWebView。对于我可以调查这种奇怪行为的方式的任何建议,我将不胜感激。

UPD:我注意到的有趣的事情是,如果第一个请求包含 Cookie 标头,那么来自所有后续响应的 Set-Cookie 将不起作用。看起来像一个错误,我不知道如何修复它。

UPD2:正如我通过查看其他请求注意到的那样,Set-Cookie 工作正常。但似乎 HTTP 客户端将 3xx 重定向序列视为单个请求,每个请求都可能带来与第一个请求相同的 HTTP 标头,而不关注最终目标 URL 的域。

因此,如果第一个请求具有“X-CSRFToken: haF3PX9l6VB9DrTJTNEQvsjsAiMZTYNC”标头,则第二个和第三个请求也具有它。同样的逻辑也适用于 Cookie。

而且由于大多数标头在重定向序列执行期间有很好的理由在请求之间复制,因此 Cookie 标头并不那么明显。我没有找到任何关于这种行为的直接规则。

顺便说一句,在我的情况下,虽然第一次重定向是由我的团队开发的后端进行的,但我要求服务器开发人员避免以这种方式使用来自我们服务器的重定向,并为我提供目标服务器的直接 url 以启动授权过程。

0 投票
1 回答
14179 浏览

ios - SFSafariViewController cookie

我知道从 iOS9 开始,您应该能够使用 SFSafariViewController 读取 cookie。

如果我使用以下内容在 JS 页面上设置 cookie:

如果我做 :

cookiesArray 始终为空。

如果我使用传统的 UIWebView

我得到了我期待的饼干。

有什么想法我可能做错了吗?

0 投票
2 回答
1609 浏览

swift - Swift 3:如何检查是否配置了特定 URL 的 cookie?

我正在为具有基于 cookie 的验证的 API 构建应用程序,并且遇到了几个问题。

我当前的问题是检查是否为域配置了自动登录 cookie 的功能,但我无法正确设置它。

我目前的尝试是:

检查特定 cookie 的 cookie 存储内容的正确方法是什么?

0 投票
1 回答
230 浏览

ios - 不同线程上的 NSURLSessionDataTask 从 UIWebView 销毁会话 cookie

我的子类 UIWebView 有一个非常丑陋的问题,它维护用户与在线后端服务器的 Web 会话,当用户登录到特定服务时,它将与会话对象进行通信。有时,我的应用程序会在 GDC 的后台线程上运行数据更新服务,并使用 NSURLSessionDataTask 执行后端请求。

后台线程工作以某种方式破坏了由 UIWebView 维护的 Web 会话对象。在我的理解中,这意味着 NSHTTPCookieStorage 被破坏了……我并不完全清楚。

如果 UIWebView 维护的会话将与在任何其他线程中运行的 NSURLSessionDataTask 完成的任何其他请求共享,我认为这会有所帮助。

过去,我在 UIWebView 会话处于活动状态时抑制了对 NSURLSessionDataTask 的调用 - 但似乎在某些情况下,其中一个调用仍然通过。

不过我的问题是:如何与 NSURLSessionDataTask 活动共享 UIWebView 使用的相同会话空间?

不幸的是,由于这两种实现的复杂性,我无法提供示例代码……</p>