Notice
Recent Posts
Recent Comments
Link
투케이2K
203. (ios/swift) [간단 소스] WKWebview 웹뷰 로드 수행 시 사전 캐시, 쿠키, 세션, 웹뷰 인스턴스 초기화 정리 본문
IOS
203. (ios/swift) [간단 소스] WKWebview 웹뷰 로드 수행 시 사전 캐시, 쿠키, 세션, 웹뷰 인스턴스 초기화 정리
투케이2K 2022. 9. 20. 08:22[개발 환경 설정]
개발 툴 : XCODE
개발 언어 : SWIFT
[소스 코드]
// MARK: - [웹뷰 다시 로드 수행 (전) 캐시 및 세션 초기화 부분]
func clearWebViewInit(){
print("")
print("===============================")
print("[A_Main >> clearWebViewInit() :: 웹뷰 인스턴스 초기화 실시]")
print("===============================")
print("")
// -----------------------------------------
if self.main_webview != nil { // [웹뷰 인스턴스가 null 이 아닌 경우]
// -----------------------------------------
// [저장된 쿠키 확인]
if #available(iOS 11.0, *) {
self.main_webview!.configuration.websiteDataStore.httpCookieStore.getAllCookies { cookies in
if cookies.count>0 { // [저장된 쿠키가 있는 경우]
for cookie in cookies {
self.main_webview!.configuration.websiteDataStore.httpCookieStore.delete(cookie, completionHandler: {
print("")
print("===============================")
print("[A_Main >> clearWebViewInit() :: [웹뷰 인스턴스] 사전 쿠키 및 세션 데이터 삭제]")
print("설 명 :: ", "자바스크립트에 저장된 [개별] 쿠키값 제거 실시")
print("key :: \(cookie.name)")
print("value :: \(cookie.value)")
print("===============================")
print("")
})
}
}
else { // [저장된 쿠키가 없는 경우]
print("")
print("===============================")
print("[A_Main >> clearWebViewInit() :: [웹뷰 인스턴스] 사전 쿠키 및 세션 데이터 삭제]")
print("결 과 :: 저장된 쿠키 없음")
print("===============================")
print("")
}
}
}
else {
print("")
print("===============================")
print("[A_Main >> clearWebViewInit() :: [웹뷰 인스턴스] 사전 쿠키 및 세션 데이터 삭제]")
print("error [에러] :: iOS 11.0 미만 디바이스")
print("===============================")
print("")
}
// -----------------------------------------
// [웹뷰 인스턴스 제거 실시]
self.main_webview?.removeFromSuperview()
self.main_webview = nil
// -----------------------------------------
// [자바스크립트 통신 사용 초기화]
self.javascriptController = WKUserContentController()
self.javascriptConfig.websiteDataStore = WKWebsiteDataStore.default() // [디폴트]
// -----------------------------------------
// [원하는 캐시 데이터만 골라서 삭제]
let websiteDataTypes = NSSet(array: [WKWebsiteDataTypeCookies, // 웹 쿠키,
// WKWebsiteDataTypeDiskCache, // 디스크 캐시
// WKWebsiteDataTypeMemoryCache, // 메모리 캐시
// WKWebsiteDataTypeLocalStorage, // 로컬 스토리지
// WKWebsiteDataTypeSessionStorage, // 세션 스토리지
WKWebsiteDataTypeOfflineWebApplicationCache, // 앱 캐시
WKWebsiteDataTypeWebSQLDatabases, // 웹 SQL 데이터 베이스
WKWebsiteDataTypeIndexedDBDatabases // 데이터 베이스 정보
])
let date = NSDate(timeIntervalSince1970: 0)
WKWebsiteDataStore.default().removeData(ofTypes: websiteDataTypes as! Set<String>, modifiedSince: date as Date, completionHandler:{
print("")
print("===============================")
print("[A_Main >> clearWebViewInit() :: [웹뷰 인스턴스] WKWebsiteDataStore 사전 쿠키 및 세션 데이터 삭제]")
print("===============================")
print("")
})
// -----------------------------------------
// [설치된 날짜 가져오는 코드]
let urlToDocumentsFolder: URL? = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last
let installDate = try? FileManager.default.attributesOfItem(atPath: (urlToDocumentsFolder?.path)!)[.creationDate] as! Date
// [설치된 날짜부터 지금까지의 cookie all clear]
URLSession.shared.configuration.httpCookieStorage?.removeCookies(since: installDate!)
// -----------------------------------------
// [URL 요청 후 잔여 캐시 데이터 삭제]
URLCache.shared.removeAllCachedResponses()
// -----------------------------------------
// [뷰 컨트롤러 자식들 모두 없애기]
self.view.removeFromSuperview()
// -----------------------------------------
}
else { // [웹뷰 인스턴스가 null 인 경우]
print("")
print("===============================")
print("[A_Main >> clearWebViewInit :: [웹뷰 인스턴스] [웹뷰 화면 초기화] main_webview 웹뷰 객체 널 (NULL) 임]")
print("[로직 :: WKWebsiteDataStore 쿠키, 세션 객체 초기화 실시]")
print("===============================")
print("")
// -----------------------------------------
// [자바스크립트 통신 사용 초기화]
self.javascriptController = WKUserContentController()
self.javascriptConfig.websiteDataStore = WKWebsiteDataStore.default() // [디폴트]
// -----------------------------------------
// [원하는 캐시 데이터만 골라서 삭제]
let websiteDataTypes = NSSet(array: [WKWebsiteDataTypeCookies, // 웹 쿠키,
// WKWebsiteDataTypeDiskCache, // 디스크 캐시
// WKWebsiteDataTypeMemoryCache, // 메모리 캐시
// WKWebsiteDataTypeLocalStorage, // 로컬 스토리지
// WKWebsiteDataTypeSessionStorage, // 세션 스토리지
WKWebsiteDataTypeOfflineWebApplicationCache, // 앱 캐시
WKWebsiteDataTypeWebSQLDatabases, // 웹 SQL 데이터 베이스
WKWebsiteDataTypeIndexedDBDatabases // 데이터 베이스 정보
])
let date = NSDate(timeIntervalSince1970: 0)
WKWebsiteDataStore.default().removeData(ofTypes: websiteDataTypes as! Set<String>, modifiedSince: date as Date, completionHandler:{
print("")
print("===============================")
print("[A_Main >> clearWebViewInit() :: [웹뷰 인스턴스] WKWebsiteDataStore 사전 쿠키 및 세션 데이터 삭제 [2]]")
print("===============================")
print("")
})
// -----------------------------------------
// [설치된 날짜 가져오는 코드]
let urlToDocumentsFolder: URL? = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last
let installDate = try? FileManager.default.attributesOfItem(atPath: (urlToDocumentsFolder?.path)!)[.creationDate] as! Date
// [설치된 날짜부터 지금까지의 cookie all clear]
URLSession.shared.configuration.httpCookieStorage?.removeCookies(since: installDate!)
// -----------------------------------------
// [URL 요청 후 잔여 캐시 데이터 삭제]
URLCache.shared.removeAllCachedResponses()
// -----------------------------------------
}
// -----------------------------------------
}
반응형
'IOS' 카테고리의 다른 글
Comments