iOS/Swift
[Swift] WkWebview의 쿠키 저장 및 로드
제이널
2021. 9. 24. 16:47
목차
- 배경
- 구현
1. 배경
앱을 사용 중이거나, 홈 버튼을 눌러 잠시 내려두면 쿠키가 유지되었지만,
앱을 종료하면 저장된 쿠키가 모두 지워지는 현상이 있어서 앱을 수정하게 되었다.
특히, 앱을 종료한 직후엔 쿠키가 유지되었지만..
다른 앱을 열어 아이폰의 메모리를 사용하게 되면 쿠키가 지워진다는 걸 알았다.
로그인 유지에 쿠키 인증값을 사용하기 때문에 쿠키를 유지하는 방법을 찾게 되었다.
2. 구현
개인적으로 생각한 구현 프로세스는 아래와 같다.
Step 1. 앱이 Background 상태가 되면 쿠키를 UserDefaults에 저장해둔다.
var result = [Any]()
WKWebsiteDataStore.default().httpCookieStore.getAllCookies { (cookies) in
for cookie in cookies {
var properties = [HTTPCookiePropertyKey : Any]()
properties[.name] = cookie.name
properties[.value] = cookie.value
properties[.domain] = cookie.domain
properties[.path] = cookie.path
properties[.version] = cookie.version
if let date = cookie.expiresDate {
properties[.expires] = date
}
result.append(properties)
}
UserDefaults.standard.setValue(result, forKey: "cookies")
}
Step 2. 앱이 Foreground로 돌아왔을 때, UserDefaults에서 쿠키를 꺼내어 이어서 사용한다.
if let cookies = UserDefaults.standard.value(forKey: "cookies") as? [[HTTPCookiePropertyKey : Any]] {
for cookie in cookies {
if let httpCookie = HTTPCookie(properties: cookie) {
HTTPCookieStorage.shared.setCookie(httpCookie)
}
}
}