웹에서 쿠키 설정 방식이 변경되면서 Android에서는 쿠키가 정상적으로 전달되는 반면, iOS에서는 제대로 전달되지 않는 문제가 발생했습니다. 이를 해결하기 위해 iOS의 쿠키 설정 방식을 변경했습니다.
var request = URLRequest(url: link)
request.addValue("aa=\(aa); bb=\(bb);", forHTTPHeaderField: "Cookie")
이 방식에서는 쿠키 값을 Cookie 헤더에 모두 추가하여 전달했습니다. 그러나 웹에서 요구하는 방식과 달라, iOS에서는 올바르게 작동하지 않았습니다.
//호출
let cookieData: [String: String] = [
"aa": aa,
"bb": bb
]
setCookies(for: webView, with: cookieData)
//함수
private func setCookies(for webView: WKWebView, with cookieData: [String: String]) {
// 쿠키의 기본 속성 설정
let baseCookieProperties: [HTTPCookiePropertyKey: Any] = [
.domain: url?.host ?? "",
.path: "/",
.secure: "TRUE",
.expires: Date().addingTimeInterval(3600) // 1시간 후 만료
]
// 쿠키 저장소 가져오기
let cookieStore = webView.configuration.websiteDataStore.httpCookieStore
// 쿠키 데이터 반복 처리
cookieData.forEach { (name, value) in
var properties = baseCookieProperties
properties[.name] = name
properties[.value] = value
if let cookie = HTTPCookie(properties: properties) {
cookieStore.setCookie(cookie) {
print("\(name) cookie set successfully.")
}
} else {
print("Failed to create cookie for \(name)")
}
}
}
이와 같이 쿠키를 개별적으로 설정하면 웹에서 요구하는 쿠키 구조를 따를 수 있고, iOS와의 호환성 문제도 해결
쿠키 만료 시간과 secure 옵션을 적용하여 보안 측면에서도 더 안전하게 사용 가능