[iOS] HTTPCookieStorage와 WKHTTPCookieStore 차이
2025. 1. 30. 12:35ㆍiOS
반응형
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 |