투케이2K

359. (ios/swift5) 웹뷰 WKWebsiteDataStore.default 와 WKWebsiteDataStore.nonPersistent 차이점 (쿠키, 세션) 본문

IOS

359. (ios/swift5) 웹뷰 WKWebsiteDataStore.default 와 WKWebsiteDataStore.nonPersistent 차이점 (쿠키, 세션)

투케이2K 2023. 11. 1. 11:38

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT5

 

[설 명]

 

==================================================
[UIWebView] 및 [WKWebView] : [쿠키 및 세션 차이점]
==================================================

1. UIWebView : HTTPCookieStorage.shared 에 쿠키를 저장하고 읽도록 처리되어 있어 개발자가 별도의 쿠키 관리를 해주지 않아도 웹뷰 간 쿠키 공유 가능

2. WKWebView  : HTTPCookieStorage.shared 를 쿠키 저장소로 이용하고 있지 않아 웹뷰 간 쿠키 공유 불가능, 개발자가 별도의 쿠키 관리 필요

==================================================






==================================================
[WKWebsiteDataStore] : [설 명]
==================================================

1. WKWebsiteDataStore 는 WKWebView 에서 쿠키 및 캐시와 같은 웹 사이트와 연결된 데이터를 관리하는 저장소 입니다


2. WKWebsiteDataStore 는 웹뷰 안에서 웹쪽 코드로부터 특정 데이터를 네이티브 단말기의 디스크에 저장하고 싶은 경우 사용할 수 있습니다


3. IOS (네이티브) 에서 WKWebsiteDataStore 사용 활용 방법 : 

  >> 웹 사이트에서 사용하는 쿠키 및 세션 관리
  >> 웹 사이트가 저장하는 데이터 (쿠키, 세션) 타입 확인
  >> 웹 사이트 데이터 (쿠키, 세션) 제거


4. 웹 데이터 관리 관련 함수 및 프로토콜 : 

  >> class WKWebsiteDataRecord : 특정 웹사이트가 지속적으로 저장하는 데이터 기록입니다.
  >> class WKHTTPCookieStore : 특정 웹 보기와 관련된 HTTP 쿠키를 관리하는 개체입니다.
  >> protocol WKURLSchemeHandler : WebKit이 처리하지 않는 URL 체계로 리소스를 로드하기 위한 프로토콜입니다.
  >> protocol WKURLSchemeTask : WebKit이 앱에서 사용자 정의 리소스를 요청하는 데 사용하는 인터페이스입니다.

==================================================






==================================================
[WKWebsiteDataStore.default] : [설 명]
==================================================

1. WKWebsiteDataStore.default 는 웹 사이트 데이터를 디스크에 영구적으로 저장하는 기본 데이터 저장소를 반환합니다


2. 분리된 A, B 뷰 컨트롤러가 WKWebsiteDataStore.default 속성을 각각 지정하고 있다면, 기본적으로 쿠키 공유가 불가능 합니다


3. 분리된 A, B 뷰 컨트롤러 각 WKWebsiteDataStore.default 속성 지정 후 쿠키 공유 방법 : 

  >> WKProcessPool() 사용해 각 웹뷰에 동일한 commonProcessPool 지정

      let commonProcessPool = WKProcessPool()

      let configuration = WKWebViewConfiguration()
      configuration.processPool = commonProcessPool


  >> 문자열로 자바스크립트 쿠키 스트링 생성 후 : document.cookie='TSEESION=ABCD1234567890; domain=twok.com; SameSite=none; path=/; Secure;'

       webview.evaluateJavaScript 로 해당 값 전달 실시 : 웹 브라우저 쿠키에 강제 셋팅 : 사전 해당 세션으로 웹 로드 시 헤더 값에서 추가 필요

==================================================






==================================================
[WKWebsiteDataStore.nonPersistent] : [설 명]
==================================================

1. WKWebsiteDataStore.nonPersistent 는 웹 사이트 데이터를 메모리에 저장하고 해당 데이터를 디스크에 쓰지 않는 새 데이터 저장소 개체를 만듭니다


2. WKWebsiteDataStore.nonPersistent 을 사용해 생성 된 웹뷰는 독자적인 웹뷰 이므로 WKProcessPool 을 적용해도 쿠키 공유가 되지 않습니다


3. WKWebsiteDataStore.nonPersistent 쿠키 공유 방법 : 사전 공유하고 싶은 쿠키 값을 프리퍼런스 데이터로 별도 저장 후 해당 웹뷰에서 아래와 같은 셋팅 필요

  >> 문자열로 자바스크립트 쿠키 스트링 생성 후 : document.cookie='TSEESION=ABCD1234567890; domain=twok.com; SameSite=none; path=/; Secure;'

       webview.evaluateJavaScript 로 해당 값 전달 실시 : 웹 브라우저 쿠키에 강제 셋팅 : 사전 해당 세션으로 웹 로드 시 헤더 값에서 추가 필요

==================================================






==================================================
[참고 사이트]
==================================================

https://developer.apple.com/documentation/webkit/wkwebsitedatastore

https://learn.microsoft.com/ko-kr/dotnet/api/webkit.wkwebsitedatastore?view=xamarin-ios-sdk-12

==================================================

 

반응형
Comments