Ответ
В iOS основная работа с HTTP cookies ведется через класс HTTPCookieStorage, который интегрирован с URLSession. Cookies автоматически сохраняются для соответствующих доменов и добавляются к последующим HTTP-запросам, если политика конфигурации сессии это позволяет.
Основные операции:
-
Создание и сохранение cookie:
let cookieProperties: [HTTPCookiePropertyKey: Any] = [ .name: "sessionID", .value: "abc123", .domain: "api.example.com", .path: "/", .secure: true, .expires: Date().addingTimeInterval(86400) ] if let cookie = HTTPCookie(properties: cookieProperties) { HTTPCookieStorage.shared.setCookie(cookie) } -
Чтение cookies для конкретного URL:
let url = URL(string: "https://api.example.com")! if let cookies = HTTPCookieStorage.shared.cookies(for: url) { for cookie in cookies { print("(cookie.name): (cookie.value)") } } -
Удаление всех cookies:
if let cookies = HTTPCookieStorage.shared.cookies { for cookie in cookies { HTTPCookieStorage.shared.deleteCookie(cookie) } }
Ключевые нюансы:
WKWebView: Использует отдельное, изолированное хранилище черезWKWebsiteDataStore. Для управления cookies внутри WebView необходимо использовать JavaScript или настраивать политики на уровнеWKHTTPCookieStore.- Intelligent Tracking Prevention (ITP): Начиная с iOS 14, Safari (и
WKWebViewв режиме Safari) применяет строгие ограничения на сторонние cookies. Это может нарушить работу традиционных механизмов аутентификации, требующих кросс-доменных cookies. - Фоновые сессии: Cookies, установленные в фоновой
URLSession, хранятся в памяти и не сохраняются в общееHTTPCookieStorageпосле завершения работы приложения.