WKWebView의 쿠키에 관한 질문입니다.

태그: 

2 답변 글타래를 보이고 있습니다
  • 글쓴이
    • Limwin
      참가자
      • 글작성 : 1
      • 답글작성 : 1

      안녕하세요!
      개발중에 문제를 맞닥뜨리게 되어서 혼자 문제를 해결해보려고 했는데 몇 주째 답이 나오지 않아 조그마한 조언이라도 얻고자 질문을 올립니다..!
      WKWebView의 쿠키문제인데요. 제가 시도했던 상황들을 최대한 정리해보겠습니다.

      먼저 인지한 문제점입니다.

      WKWebView의 Session Cookie(Session-Only : True 인 쿠키)가 필요하여 WKWebsiteDataStore, NSHTTPCookieStore를 활용하여 가져오려고 시도해 봤으나 세션 쿠키를 가져오는 경우가 있고 가지고 오지 못하는 경우가 있었습니다. 이런 상황이 일정한 패턴이 있는게 아니라 무작위로 발생되었습니다.

      예를 들어, 쿠팡 사이트를 기준으로 로그인이 되어있을때 쿠키명이 CUPT, CSID, CPUSR_RL인 쿠키들은 모두 세션 쿠키입니다. (개발자 도구로 확인 가능합니다.)

      가져오기 위한 방법으로 아래에 해당하는 객체를 사용하였습니다.

      • WKWebsiteDataStore.defaultDataStore.httpCookieStore getAllCookies
      • NSHTTPCookieStorage.sharedHTTPCookieStorage

      저 두 방법을 사용하여 쿠키를 가져오고, WKWebView에 대한 설정으로 시도한 방법들은 다음과 같습니다.

      1. WKProcessPool을 싱글톤으로 만들어 WKWebView에 적용. (다음 로그인시에도 적용하기 위함.)
      2. getAllCookie를 하기 전 3~5초의 지연시간을 줌. (쿠키를 동기화하는데 시간이 필요하다는 의견 수용.)
      3. WKWebViewConfiguration에서 websiteDataStore 설정시 defaultDataStore으로 설정.
        세 방법 모두 세션 쿠키를 100%로 가져오지는 못했습니다.

      여기서 WKWebView 설정이나, 쿠키 등 제가 놓치고 있는 부분이 있는 경우 말씀해주시면 감사하겠습니다. (_ _)

    • 야곰
      키 마스터
      • 글작성 : 37
      • 답글작성 : 579

      몇 주간 고심이 많으셨겠습니다.

      유사 사례를 겪어보지 않아 확실치는 않지만 의심할 만한 포인트를 몇 가지 이야기해보겠습니다. 정확한 해결 방법은 아닐 수 있습니다.
      1. 3~5초의 지연시간 중 비동기 처리가 제대로 되었는가?
      2. defaultDataStore 설정을 반복적으로 진행하여 기존의 defaultDataStore가 날아가진 않았는가?
      3. iOS 버전 자체의 버그는 아닌지? -> 시뮬레이터나 기기의 버전을 변경한 후에 시도를 해보면 어떨지요?

      그나저나 다음 로그인에 적용하기 위함이란 뜻은 앱을 종료 하고 다시 실행했을 때의 이야기일까요?

      위의 방법들로도 해결이 안된다면 어느정도 코드를 보여주셔야 다른 분들도 원인을 알아볼 수 있지 않을까합니다.

    • Limwin
      참가자
      • 글작성 : 1
      • 답글작성 : 1

      안녕하세요~! 야곰님 답변달아주셔서 감사합니다!!

      먼저 지연시간은 이렇게 처리를 해주었습니다. (main queue인 이유는 UI처리가 포함되기 때문입니다.)
      dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
      // getAllCookies
      }

      두번째의 경우 defaultDataStore를 webView를 생성할때마다 새로 세팅하지말고 UserDefault에 저장하는 방식이나 싱글톤처럼 생성한 시도는 아직 해보지 않았습니다.

      세번째의 경우는 시뮬레이터에서 iOS12 ~ 14, 실기기에서는 iOS13 ~ 14에서 테스트 진행해보았습니다.

      마지막의 다음 로그인….의 경우에는 야곰이 이해하신 부분이 맞습니다!
      계속해서 해결이 안된다면 코드를 정리해서 돌아오도록 하겠습니다.

      말씀해주신 방법 참고해서 테스트 범위를 넓게 잡아서 다시 진행해보도록 하겠습니다. 감사합니다!

      • 이 답변은 Limwin에 의해 4 years, 2 months 전에 수정됐습니다.
2 답변 글타래를 보이고 있습니다
  • 답변은 로그인 후 가능합니다.

logo landscape small

사업자번호 : 743-81-02195
통신판매업 신고번호 : 제 2022-충북청주-1278 호
고객센터 : 카카오톡채널 @yagom