Monti

Swift ) WkWebView - Cookie ๋ณธ๋ฌธ

IOS/Swift

Swift ) WkWebView - Cookie

montt 2022. 10. 17. 21:48

๐Ÿช

WebView Cookie

HTTP Cookie ๊ฐœ๋…


์ฟ ํ‚ค(cookie)๋ž€? ํ•˜์ดํผ ํ…์ŠคํŠธ์˜ ๊ธฐ๋ก์„œ์˜ ์ผ์ข…์œผ๋กœ์„œ ์ธํ„ฐ๋„ท ์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋– ํ•œ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•  ๊ฒฝ์šฐ ๊ทธ ์‚ฌ์ดํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ์ธํ„ฐ๋„ท ์‚ฌ์šฉ์ž์˜ ์ปดํ“จํ„ฐ์— ์„ค์น˜๋˜๋Š” ์ž‘์€ ๊ธฐ๋ก ์ •๋ณด ํŒŒ์ผ์„ ์ผ์ปซ๋Š”๋‹ค. HTTP ์ฟ ํ‚ค, ์›น์ฟ ํ‚ค, ๋ธŒ๋ผ์šฐ์ € ์ฟ ํ‚ค๋ผ๊ณ ๋„ ํ•œ๋‹ค. ์ด ๊ธฐ๋ก ํŒŒ์ผ์— ๋‹ด๊ธด ์ •๋ณด๋Š” ์ธํ„ฐ๋„ท ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ™์€ ์›จ์‚ฌ์ดํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•  ๋•Œ๋งˆ๋‹ค ์ฝํžˆ๊ณ  ์ˆ˜์‹œ๋กœ ์ƒˆ๋กœ์šด ์ •๋ณด๋กœ ๋ฐ”๋€๋‹ค.

์ฟ ํ‚ค ์ •๋ณด

  1. Created
  1. Domain
  1. Expires
  1. Name
  1. Path
  1. Secure
  1. Value
  1. 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

 

Comments