设置cookieAcceptPolicy为.never后,setCookie仍能写入Cookie的疑问
其实这是个很容易踩的小坑——cookieAcceptPolicy这个属性的作用范围并没有你想的那么广:它只控制系统自动从网络请求的响应中接收Cookie的行为,完全不限制开发者手动调用setCookie(_:)方法添加Cookie的操作。
具体来说:
- 当你把策略设为
.never时,系统会拒绝自动存储来自HTTP/HTTPS响应里的Cookie,但这并不影响你主动通过代码把Cookie塞进存储里——毕竟这是你明确发起的操作,不属于“自动接收”的范畴。 - 看你的测试代码,你是手动创建了
HTTPCookie实例,然后主动调用setCookie(_:)写入,这个动作是绕过cookieAcceptPolicy限制的,因为它是开发者主动触发的,不是系统自动处理的网络响应Cookie。
如果你的需求是完全禁止任何Cookie写入(包括手动操作),那你需要自己额外做校验逻辑——比如在调用setCookie(_:)前先检查当前的策略,或者干脆封装一层自己的Cookie存储逻辑,替代系统的HTTPCookieStorage。
你的测试代码示例:
let someCookie = HTTPCookie(properties: [ .name: "cookie", .value: "value", .path: "/", .domain: "domain.com", .expires: Date(timeIntervalSinceNow: 60) ])! let storage = HTTPCookieStorage.shared storage.cookieAcceptPolicy = .never print(storage.cookies?.count) // 0 storage.setCookie(someCookie) print(storage.cookies?.count) // 1
内容的提问来源于stack exchange,提问作者Daniil Subbotin
相关产品推荐
相关产品推荐

