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

URLSession是否持久化Cookie?重启App后重复请求是否自动携带Cookie?

URLSession的Cookie持久化问题解答

嘿,这个问题问到点子上了,我来给你拆解清楚:

1. URLSession是否会持久化Cookie?

答案是默认情况下会,但得看你用的是哪种URLSession配置:

  • 如果你用的是URLSession.shared(也就是你代码里的共享会话),它默认会使用系统的共享HTTP cookie存储,这个存储是持久化的——Cookie会被保存到设备上,就算App重启也不会丢。
  • 如果你自己创建自定义URLSessionConfiguration:
    • .default配置和共享会话行为一致,同样使用持久化的cookie存储;
    • .ephemeral(临时会话)则不会持久化任何Cookie,会话结束后Cookie就会被销毁;
    • .background配置也会持久化Cookie,存储逻辑和前台会话略有不同,但核心是重启后依然能保留。

2. 下次打开App发起相同请求时,会自动带上之前的Cookie吗?

在默认配置(比如URLSession.shared或者.default配置的会话)下,是的,会自动带上。系统的共享cookie存储会自动匹配请求的域名、路径等规则,把符合条件的Cookie自动附加到请求头里,完全不需要你手动处理。

不过要注意几个例外情况:

  • 如果Cookie的Expires或者Max-Age属性设置的过期时间已过,这个Cookie会被自动清理,不会再被带上;
  • 如果服务器返回的Cookie设置了HttpOnly、Secure或者特定的Domain/Path规则,只有当请求完全符合这些规则时,Cookie才会被自动附加;
  • 要是用的是.ephemeral会话,重启App后之前的Cookie早就没了,自然不会带上。

代码示例说明

你给出的这段代码:

let task = URLSession.shared.dataTask(with: url, completionHandler: { data, response, error in
    // 处理响应、数据或错误
})
task.resume()

完全是默认行为——当这个请求收到带Set-Cookie头的响应时,系统会自动把Cookie保存到持久化存储里。下次你再用URLSession.shared发起同一个域名的符合规则的请求,Cookie就会被自动加到请求头里,不用写任何额外代码。

如果想自定义Cookie的存储行为(比如手动管理Cookie),可以创建自定义配置:

let config = URLSessionConfiguration.default
// 访问httpCookieStorage来手动添加、删除Cookie
if let cookieStorage = config.httpCookieStorage {
    // 手动添加一个Cookie示例
    let cookie = HTTPCookie(properties: [
        .name: "customCookie",
        .value: "123456",
        .domain: "example.com",
        .path: "/",
        .expires: Date().addingTimeInterval(3600)
    ])
    if let cookie = cookie {
        cookieStorage.setCookie(cookie)
    }
}
let session = URLSession(configuration: config)
let task = session.dataTask(with: url) { data, response, error in
    // 处理逻辑
}
task.resume()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 17:17:29