본문 바로가기

iOS/Swift

[Swift] WkWebview의 쿠키 저장 및 로드

목차
  1. 배경
  2. 구현
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)
        }
    }
}

 

위와 같이 코드를 추가해서 쿠키를 계속 유지시킬 수 있었다.