WKWebsiteDataStore

Webkit ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ์›น ์‚ฌ์ดํŠธ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ

 

์ฟ ํ‚ค, ์บ์‹œ, ๋กœ์ปฌ ์ €์žฅ์†Œ ๋“ฑ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด

 

WKWebView์™€ ํ•จ๊ป˜ ๋™์ž‘ํ•˜๋ฉด์„œ ์›น์‚ฌ์ดํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ

 

WKWebsiteDataStore ์ฃผ์š” ๊ธฐ๋Šฅ

httpCookieStore: ์›น์‚ฌ์ดํŠธ์˜ ์ฟ ํ‚ค๋ฅผ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์ถ”๊ฐ€/์‚ญ์ œ

default(): ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ (์ผ๋ฐ˜์ ์ธ ์›น ๋ธŒ๋ผ์šฐ์ง•)

nonPersistent(): ๋น„ ํœ˜๋ฐœ์„ฑ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ (์„ธ์…˜์ด ๋๋‚˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ)
fetchDataRecords(offTypes:): ํŠน์ • ์œ ํ˜•์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ด

removeData(ofTypes:for:): ํŠน์ • ์œ ํ˜•์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œ

 

์ฟ ํ‚ค ๊ฐ€์ ธ์˜ค๊ธฐ (httpCookieStore.getAllCookies)

WKWebsiteDataStore.default().httpCookieStore.getAllCookies { cookies in
    for cookie in cookies {
        print("์ฟ ํ‚ค ์ด๋ฆ„: \(cookie.name), ๊ฐ’: \(cookie.value)")
    }
}

 

getAllCookies()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ €์žฅ๋œ ๋ชจ๋“  ์ฟ ํ‚ค๋ฅผ ๊ฐ€์ ธ์™€์„œ ์ถœ๋ ฅ

 

์ฟ ํ‚ค ์ถ”๊ฐ€ (httpCookieStore.setCookie)

let cookie = HTTPCookie(properties: [
    .domain: "example.com",
    .path: "/",
    .name: "user_token",
    .value: "123456",
    .secure: "TRUE",
    .expires: NSDate(timeIntervalSinceNow: 3600) // 1์‹œ๊ฐ„ ํ›„ ๋งŒ๋ฃŒ
])!

WKWebsiteDataStore.default().httpCookieStore.setCookie(cookie)

 

ํŠน์ • ๋„๋ฉ”์ธ(example.com)์— user_token ์ฟ ํ‚ค ์ถ”๊ฐ€

1์‹œ๊ฐ„(3600์ดˆ) ํ›„ ๋งŒ๋ฃŒ

 

ํŠน์ • ์ฟ ํ‚ค ์‚ญ์ œ (httpCookieStore.delete)

func deleteCookie(_ name: String) {
    WKWebsiteDataStore.default().httpCookieStore.getAllCookies { cookies in
        for cookie in cookies {
            if cookie.name == name {
                WKWebsiteDataStore.default().httpCookieStore.delete(cookie)
            }
        }
    }
}

 

getAllCookies()๋กœ ์ฟ ํ‚ค๋ฅผ ๊ฐ€์ ธ์™€์„œ ํŠน์ • ์ด๋ฆ„๊ณผ ์ผ์น˜ํ•˜๋ฉด ์‚ญ์ œ

 

๋ชจ๋“  ์ฟ ํ‚ค ์‚ญ์ œ (removeData)

WKWebsiteDataStore.default().fetchDataRecords(ofTypes: [WKWebsiteDataTypeCookies]) { records in
    WKWebsiteDataStore.default().removeData(ofTypes: [WKWebsiteDataTypeCookies], for: records) {
        print("๋ชจ๋“  ์ฟ ํ‚ค ์‚ญ์ œ ์™„๋ฃŒ!")
    }
}

 

์ €์žฅ๋œ ๋ชจ๋“  ์ฟ ํ‚ค ๋ฐ์ดํ„ฐ๋ฅผ ์ผ๊ด„ ์‚ญ์ œ

๋ฐ˜์‘ํ˜•
JerryiOS