Things take time

[SWIFT] WKWebview 쿠키, 세션, 로컬스토리지 등 웹 데이터 삭제 및 값 얻어오기 본문

iOS (기능)

[SWIFT] WKWebview 쿠키, 세션, 로컬스토리지 등 웹 데이터 삭제 및 값 얻어오기

겸손할 겸 2017. 12. 20. 11:30

[코드]


let websiteDataTypes = NSSet(array: [WKWebsiteDataTypeDiskCache, WKWebsiteDataTypeMemoryCache, WKWebsiteDataTypeCookies])
let date = NSDate(timeIntervalSince1970: 0)
WKWebsiteDataStore.default().removeData(ofTypes: websiteDataTypes as! Set, modifiedSince: date as Date, completionHandler:{ })
print("delete cache data")
/* 모든 열어본 페이지에 대한 데이터를 모두 삭제
WKWebsiteDataStore.default().fetchDataRecords(ofTypes: WKWebsiteDataStore.allWebsiteDataTypes(), completionHandler: {
    (records) -> Void in
    for record in records{
        WKWebsiteDataStore.default().removeData(ofTypes: record.dataTypes, for: [record], completionHandler: {})
        print("delete cache data")
    }
})
*/

중요한 점은 websiteDataTypes에 들어가는 array에서 WKWebsiteDataTypeXXXX로 원하는 데이터 등을 선택할 수 있다.



원하는 것만 선택할 때는 첫 번째 방법대로 하면 되고, 아예 모든 웹 데이터들을 삭제하고 싶다면 주석 부분으로 하면 된다.



[값 얻기]


현재 웹뷰 안에 있는 웹페이지에서 사용하는 쿠키의 값을 얻어오려면

        WKWebsiteDataStore.default().httpCookieStore.getAllCookies({
            (cookies) in
            for cookie in cookies{
                print("WKWebsiteDataStore cookie : \(cookie.name) // \(cookie.value)")
            }
        })

비슷한 예로 HTTPCookieStorage라는 클래스를 이용하여 얻어오는 것도 있는데, 값이 제대로 리턴되지 않는다.

이유는 찾기가 어려웠고.. 일단은 삭제하던 클래스와 마찬가지로 WKWebsiteDataStore를 이용하는 것이 나을 듯 하다.


참고 : https://stackoverflow.com/questions/41765322/wkwebview-pick-cookies-from-nshttpcookiestorage