You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WebView与NSURLConnection、NSURLSession间共享Cookie?

在NSURLConnection和NSURLSession中复用WebView设置的Cookie

因为WebView会自动将登录后的Cookie写入应用共享的HTTPCookieStorage,所以NSURLConnection和NSURLSession在默认配置下都能直接复用这些Cookie,以下是具体实现方式和注意事项:

一、NSURLConnection 复用Cookie

1. 默认自动复用

NSURLConnection发起请求时,会自动从共享的HTTPCookieStorage中匹配对应域名的Cookie并添加到请求头,无需额外操作:

NSURL *targetUrl = [NSURL URLWithString:@"https://your-target-domain.com/api/resource"];
NSURLRequest *request = [NSURLRequest requestWithURL:targetUrl];

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[connection start];

2. 手动强制添加Cookie(适用于自动匹配失败场景)

若遇到Cookie未自动带上的情况,可手动从存储中提取对应Cookie并添加到请求头:

NSURL *targetUrl = [NSURL URLWithString:@"https://your-target-domain.com/api/resource"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:targetUrl];

// 获取目标域名下的所有Cookie
NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:targetUrl];
if (cookies.count > 0) {
    // 将Cookie转换为标准请求头格式
    NSString *cookieHeader = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies];
    [request setValue:cookieHeader[@"Cookie"] forHTTPHeaderField:@"Cookie"];
}

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[connection start];

二、NSURLSession 复用Cookie

1. 默认配置自动复用

使用defaultSessionConfiguration创建的NSURLSession,会自动绑定共享的HTTPCookieStorage,请求将自动带上WebView设置的Cookie:

NSURL *targetUrl = [NSURL URLWithString:@"https://your-target-domain.com/api/resource"];
NSURLRequest *request = [NSURLRequest requestWithURL:targetUrl];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
    // 处理响应数据
}];
[task resume];

2. 自定义配置确保复用Cookie

若使用自定义配置,需避免使用临时Cookie存储(如ephemeralSessionConfiguration),显式绑定共享存储:

NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
// 显式指定使用共享Cookie存储(默认已开启,此处为明确说明)
config.HTTPCookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];

NSURLSession *session = [NSURLSession sessionWithConfiguration:config];
// 后续发起请求步骤同上

3. 手动添加Cookie(同NSURLConnection逻辑)

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:targetUrl];
NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:targetUrl];
if (cookies.count > 0) {
    NSString *cookieHeader = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies];
    [request setValue:cookieHeader[@"Cookie"] forHTTPHeaderField:@"Cookie"];
}

NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:...];
[task resume];

关键注意事项

  • Cookie匹配规则:确保Cookie的域(domain)和路径(path)与请求URL完全匹配,例如WebView登录域为example.com,若请求子域api.example.com,需Cookie的域设置为.example.com(带前缀点)才能跨子域复用。
  • Cookie有效期:检查WebView设置的Cookie过期时间,过期Cookie会被自动从存储中移除,无法复用。
  • ATS配置:若应用开启了App Transport Security,需确保目标域名在ATS允许范围内,避免因ATS限制导致请求失败(与Cookie无关但易混淆问题)。

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 00:31:05