WebView Cookie
HTTP Cookie ๊ฐ๋
์ฟ ํค(cookie)๋? ํ์ดํผ ํ ์คํธ์ ๊ธฐ๋ก์์ ์ผ์ข ์ผ๋ก์ ์ธํฐ๋ท ์ฌ์ฉ์๊ฐ ์ด๋ ํ ์น์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ ๊ฒฝ์ฐ ๊ทธ ์ฌ์ดํธ๊ฐ ์ฌ์ฉํ๊ณ ์๋ ์๋ฒ๋ฅผ ํตํด ์ธํฐ๋ท ์ฌ์ฉ์์ ์ปดํจํฐ์ ์ค์น๋๋ ์์ ๊ธฐ๋ก ์ ๋ณด ํ์ผ์ ์ผ์ปซ๋๋ค. HTTP ์ฟ ํค, ์น์ฟ ํค, ๋ธ๋ผ์ฐ์ ์ฟ ํค๋ผ๊ณ ๋ ํ๋ค. ์ด ๊ธฐ๋ก ํ์ผ์ ๋ด๊ธด ์ ๋ณด๋ ์ธํฐ๋ท ์ฌ์ฉ์๊ฐ ๊ฐ์ ์จ์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ ๋๋ง๋ค ์ฝํ๊ณ ์์๋ก ์๋ก์ด ์ ๋ณด๋ก ๋ฐ๋๋ค.
์ฟ ํค ์ ๋ณด
- Created
- Domain
- Expires
- Name
- Path
- Secure
- Value
- Version
WKHTTPCookieStore
์น ํ์ด์ง์ ์ด๊ธฐ ์ฟ ํค๋ฅผ ์ง์ ํ๊ณ ์น ์ฝํ ์ธ ์ ์ฟ ํค๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ด ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์์ํ ๋ ํ์ฌ ์ธ์ ์ ๋ํ ์ฟ ํค๋ฅผ ์ญ์ ํ ์ ์๋ค. ์น ํ์ด์ง๊ฐ ์ฟ ํค๋ฅผ ๋ณ๊ฒฝํ๋ ์์ ์ ๊ฐ์งํ๋ คํ๋ค๋ฉด ํด๋น ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ Cookie Observer๋ฅผ ์ค์นํ์ฌ์ผ ํ๋ค.
WKWebsiteDataStore
WebView์ ๋ํ ์ฟ ํค, ๋์คํฌ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์บ์, ๊ธฐํ ์ ํ์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด๋ก ๋ค์์ ์ํํ๋ค.
- ์น ์ฌ์ดํธ์์ ์ฌ์ฉํ๋ ์ฟ ํค ๊ด๋ฆฌ
- ์น์ฌ์ดํธ๊ฐ ์ ์ฅํ๋ ๋ฐ์ดํฐ ์ ํ์ ๋ํด ์์๋ณด๊ธฐ
- ์์น ์๋ ์น ์ฌ์ดํธ ๋ฐ์ดํฐ ์ ๊ฑฐ
์น ์ฟ ํค ๊ฐ์ ธ์ค๊ธฐ
extension WKWebView {
// ์ฟ ํค ์ ์ฅ์
private var httpCookieStore: WKHTTPCookieStore {
// WebView ๋ฐ์ดํฐ ์ ์ฅ์ / ๊ธฐ๋ณธ ๋ฐ์ดํฐ ์ ์ฅ์ / ์ฟ ํค ์ ์ฅ์
return WKWebsiteDataStore.default().httpCookieStore
}
// ์ฟ ํค ๊ฐ์ ธ์ค๊ธฐ
func getCookies(for domain: String? = nil, completion: @escaping ([String : Any])->()) {
var cookieDict = [String : AnyObject]()
// ์น์ ์ ์ฅ๋์ด์๋ ๋ชจ๋ ์ฟ ํค ๊ฐ์ ธ์ค๊ธฐ
httpCookieStore.getAllCookies { cookies in
for cookie in cookies {
if let domain = domain {
if cookie.domain.contains(domain) {
cookieDict[cookie.name] = cookie.properties as AnyObject?
}
} else {
cookieDict[cookie.name] = cookie.properties as AnyObject?
}
}
completion(cookieDict)
}
}
}
์ฐธ๊ณ : https://code-examples.net/ko/q/1f9edd7