쿠키 저장 및 불러오기

URLSession 이라던지 UIWebView라던지 앱실행시 얻은 쿠키(세션)는 앱사용시 유지되는데 앱종료시 날라간다.

쿠키를 저장하여 재활용하는 방법은 헤더에 얹혀서 보내는것도 있지만 쿠키로 관리되진않으니 HTTPCookieStorage를 건드려서 관리해야한다.

extension HTTPCookieStorage {
    static func clear(){
        if let cookies = HTTPCookieStorage.shared.cookies {
            for cookie in cookies {
                HTTPCookieStorage.shared.deleteCookie(cookie)
            }
        }
    }
    static func save(){
        var cookies = [Any]()
        if let newCookies = HTTPCookieStorage.shared.cookies {
            for newCookie in newCookies {
                var cookie = [HTTPCookiePropertyKey : Any]()
                cookie[.name] = newCookie.name
                cookie[.value] = newCookie.value
                cookie[.domain] = newCookie.domain
                cookie[.path] = newCookie.path
                cookie[.version] = newCookie.version
                if let date = newCookie.expiresDate {
                    cookie[.expires] = date
                }
                cookies.append(cookie)
            }
            UserDefaults.standard.setValue(cookies, forKey: "cookies")
            UserDefaults.standard.synchronize()
        }

    }
    static func restore(){
        if let cookies = UserDefaults.standard.value(forKey: "cookies") as? [[HTTPCookiePropertyKey : Any]] {
            for cookie in cookies {
                if let oldCookie = HTTPCookie(properties: cookie) {
                    print("cookie loaded:\(oldCookie)")
                    HTTPCookieStorage.shared.setCookie(oldCookie)
                }
            }
        }

    }
}

위와 같은 extension을 작성하여 다음과 같이 사용할 수 있다.

HTTPCookieStorage.restore()//앱실행시 호출하여 기존 쿠키를 불러온다.
HTTPCookieStorage.save() //쿠키를 얻고 난후 호출하여 쿠키를 저장한다.
HTTPCookieStorage.clear() //로그아웃이나 세션 만료시 저장된 쿠키를 삭제한다.(사이트주소가 바뀐다거나 하면서 쿠키가 누적될수 있다.)

Posted in Programming Life with :

Written on February 3, 2017