[iOS] HTTPCookieStorage와 WKHTTPCookieStore 차이

2025. 1. 30. 12:35iOS

반응형

HTTPCookieStorage vs WKHTTPCookieStore 차이점

두 개의 가장 큰 차이점은 어디에서 동작하는지자동 동기화 여부입니다.

구분 HTTPCookieStorage WKHTTPCookieStore
쿠키 저장 위치 앱 전체에서 사용 (URLSession, UIWebView) WKWebView 내부에서만 사용
자동 동기화 URLSession과 자동 동기화됨 WKWebView와 자동 동기화되지 않음 (수동 동기화 필요)
관리 방식 HTTPCookieStorage.shared로 접근 WKWebViewConfiguration.websiteDataStore.httpCookieStore로 접근
쿠키 저장 및 삭제 동기 방식 API (setCookie, deleteCookie) 비동기 방식 API (setCookie, deleteCookie)

 


1. HTTPCookieStorage (앱 전역 쿠키 저장소)

특징

  • URLSession, UIWebView와 함께 사용할 수 있는 iOS 기본 쿠키 저장소입니다.
  • 네트워크 API 요청과 자동으로 동기화되므로, 로그인 세션을 유지하는 데 유용합니다.
  • 하지만 WKWebView와는 자동 동기화되지 않으며, 별도로 동기화해야 합니다.

사용 예시

쿠키 저장

if let cookie = HTTPCookie(properties: [
    .domain: "example.com",
    .path: "/",
    .name: "token",
    .value: "123456",
    .secure: "TRUE",
    .expires: NSDate(timeIntervalSinceNow: 3600)
]) {
    HTTPCookieStorage.shared.setCookie(cookie)
}

쿠키 가져오기

if let cookies = HTTPCookieStorage.shared.cookies(for: URL(string: "https://example.com")!) {
    for cookie in cookies {
        print("쿠키: \(cookie.name) = \(cookie.value)")
    }
}

2. WKHTTPCookieStore (WKWebView 전용 쿠키 저장소)

특징

  • WKWebView에서만 사용할 수 있으며, HTTPCookieStorage와 자동 동기화되지 않습니다.
  • 비동기 API(setCookie, getAllCookies)를 사용해야 합니다.
  • WKWebView의 세션을 유지하려면 수동으로 쿠키를 동기화해야 합니다.

사용 예시

쿠키 저장 (비동기)

 
let cookie = HTTPCookie(properties: [
    .domain: "example.com",
    .path: "/",
    .name: "token",
    .value: "123456",
    .secure: "TRUE",
    .expires: NSDate(timeIntervalSinceNow: 3600)
])

if let cookie = cookie {
    let cookieStore = WKWebsiteDataStore.default().httpCookieStore
    cookieStore.setCookie(cookie) {
        print("쿠키 저장 완료!")
    }
}

쿠키 가져오기

let cookieStore = WKWebsiteDataStore.default().httpCookieStore
cookieStore.getAllCookies { cookies in
    for cookie in cookies {
        print("WKWebView 쿠키: \(cookie.name) = \(cookie.value)")
    }
}

3. HTTPCookieStorage ↔ WKHTTPCookieStore 수동 동기화

HTTPCookieStorage의 쿠키를 WKHTTPCookieStore로 동기화

WKWebView가 HTTPCookieStorage의 쿠키를 자동으로 가져오지 않기 때문에, 직접 설정해 주어야 합니다.

func syncCookiesToWKWebView(webView: WKWebView) {
    let cookieStore = webView.configuration.websiteDataStore.httpCookieStore
    let cookies = HTTPCookieStorage.shared.cookies ?? []

    for cookie in cookies {
        cookieStore.setCookie(cookie) {
            print("쿠키 동기화: \(cookie.name) = \(cookie.value)")
        }
    }
}
 

이 함수를 WKWebView가 생성된 직후 실행해야 쿠키가 정상적으로 반영됩니다.


4. 언제 HTTPCookieStorage를 사용하고, 언제 WKHTTPCookieStore를 사용해야 할까요?

사용 상황 HTTPCookieStorage WKHTTPCookieStore
URLSession API 요청 시 ✅ 사용 가능 ❌ 사용 불가능
WKWebView에서 세션 유지 ❌ 자동 동기화 안 됨 ✅ 사용해야 함
로그인 세션 유지 ✅ HTTPCookieStorage에서 가져와 WKHTTPCookieStore로 넣어야 함 ✅ 필요
네트워크 API와 웹뷰가 같은 쿠키 사용 🚨 직접 동기화 필요 🚨 직접 동기화 필요

🚀 결론

  • HTTPCookieStorage: URLSession, UIWebView와 함께 사용할 수 있는 앱 전역 쿠키 저장소입니다.
  • WKHTTPCookieStore: WKWebView 내부에서만 관리되는 쿠키 저장소로, HTTPCookieStorage와 자동 동기화되지 않습니다.
  • 자동 동기화되지 않으므로, WKWebView에서 HTTPCookieStorage의 쿠키를 WKHTTPCookieStore로 직접 동기화해야 합니다.

즉, 네트워크 API와 WKWebView에서 동일한 로그인 세션을 유지하려면 수동으로 HTTPCookieStorage의 쿠키를 WKHTTPCookieStore에 넣어야 한다는 점을 꼭 기억하시면 됩니다! 🚀

반응형

'iOS' 카테고리의 다른 글

[iOS] Core Data vs Realm  (0) 2025.02.01
[Swift] Optional  (0) 2025.02.01
[iOS] 웹뷰(WebView)기반 앱 개발 시 주의할 점  (2) 2025.01.30
[iOS] SwiftUI와 Combine (2)  (0) 2025.01.28
[iOS] SwiftUI와 Combine  (0) 2025.01.28