相关疑难解决方法(0)

NSHTTPCookieStorage状态未保存在应用程序出口上.那里有任何明确的知识/文献?

苦苦于解决这个问题并且不愿实施自定义cookie管理系统.

看来iOS的一些隐藏级别的HTTP实现无法正确管理无会话cookie.每当HTTP响应设置或删除cookie时,立即检查NSHTTPCookieStorage cookie将产生预期结果并指示正确的sessionOnly值.

但是,如果应用程序在响应更新cookie后立即退出,则重新启动时,这些sessionOnly = FALSE cookie将恢复为某个先前状态,并且最新更新将丢失.

是否通过响应头或NSHTTPCookieStorage setCookie设置/删除cookie:没有区别.

一些缓存/同步伏都教必须在幕后进行.cookie变为持久化所需的时间最长可达5秒.

在那里有谁或者可以指出这种行为的明确解释?这是一个简单明了的bug吗?还是一些我无法理解的无证特征?

您可以使用一些代码重现:

- (void)applicationDidBecomeActive:(UIApplication *)application
{

    [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];

    NSHTTPCookie *cookie;
    for (cookie in [NSHTTPCookieStorage sharedHTTPCookieStorage].cookies) {
        NSLog(@"%@=%@", cookie.name, cookie.value);
    }

    NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];
    [cookieProperties setObject:@"testCookie" forKey:NSHTTPCookieName];
    [cookieProperties setObject:[NSString stringWithFormat:@"%f", [[NSDate date] timeIntervalSince1970]] forKey:NSHTTPCookieValue];
    [cookieProperties setObject:@"www.example.com" forKey:NSHTTPCookieDomain];
    [cookieProperties setObject:@"www.example.com" forKey:NSHTTPCookieOriginURL];
    [cookieProperties setObject:@"/" forKey:NSHTTPCookiePath];
    [cookieProperties setObject:@"0" forKey:NSHTTPCookieVersion];

    // set expiration to one month from now
    [cookieProperties setObject:[[NSDate date] dateByAddingTimeInterval:2629743] forKey:NSHTTPCookieExpires];

    cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
    [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];

}
Run Code Online (Sandbox Code Playgroud)

此代码应在每次启动时输出新值.相反,您会看到如果您快速退出应用程序,则值将保持不变. …

cookies objective-c nshttpcookie ios

54
推荐指数
3
解决办法
2万
查看次数

WKWebView,获取所有cookie

我想从WKWebView获取所有cookie.为什么?我已经启动了一个使用基于Web的身份验证的项目.因此,我应该拦截cookie以确保用户已登录并用于其他目的.另一种情况 - 想象一下,如果用户登录,而不是"杀死"应用程序 - 由于存储此cookie会话的一些延迟将丢失:(.

问题似乎是cookie被缓存而不是立即保存到文件中.

(@Kemenaran从这里 - 下面的第5页)

我试图抓住他们的地方 -

webView:decidePolicyForNavigationResponse:decisionHandler:,

func webView(webView: WKWebView, decidePolicyForNavigationResponse navigationResponse: WKNavigationResponse, decisionHandler: (WKNavigationResponsePolicy) -> Void) {

  if let httpResponse = navigationResponse.response as? NSHTTPURLResponse {
    if let headers = httpResponse.allHeaderFields as? [String: String], url = httpResponse.URL {
      let cookies = NSHTTPCookie.cookiesWithResponseHeaderFields(headers, forURL: url {
      for cookie in cookies {
            NSHTTPCookieStorage.shared.set(cookie)
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但并非所有请求都是导航,因此跳过一个cookie(在我的情况下),请参阅下面的详细信息

在此输入图像描述

关于我试过的其他选项的几句话......

  1. 是的,我知道从iOS 11开始,我们可以在这里WKHTTPCookieStore提到.但我的项目应该支持iOS 9+

在此输入图像描述

  1. 我100%肯定,在登录后5-10秒,所需的cookie将保存到NSHttpCookieStorage(至少我几天的所有测试都确认)

  2. 我尝试使用提供的观察者NSHTTPCookieManagerCookiesChangedNotification,但它只为内部的cookie提供回调webView:decidePolicyForNavigationResponse:decisionHandler

  3. 我也尝试使用这里提到的一些JS来获取cookie …

nshttpcookie ios swift wkwebview nshttpcookiestorage

6
推荐指数
1
解决办法
2126
查看次数

iPhone 应用程序 Cookie 延迟

我的 iPhone 应用程序有一个 UIWebView,它加载一个包含设置 cookie 的 javascript 的页面。似乎如果我设置 cookie 并在 10-15 秒内退出应用程序,那么 cookie 永远不会保存,但是如果我设置 cookie,等待 10-15 秒然后退出应用程序,cookie 就会被保存。

任何人都知道为什么会出现延迟以及如何立即保存 cookie。

iphone cookies

1
推荐指数
1
解决办法
1351
查看次数