iOS Xcode Swift 환경에서 WKWebView를 사용하여 하이브리드앱을 만들때 자동로그인 처리가 쿠키를 이용해서 하는 경우 동작하지 않는다.

 

 

 

 

 

 

- 기존에 사용했던 디플리케이트된 UIWebView에서는 자동로그인이 잘되었던것 같은데, WKWebView에서는 자동로그인이 동작하지 않는다.

- 서버의  html, Javascript 환경에서 설정한 쿠키는, 단말의 WKWebView에서 조회는 가능하나 변경할 수 없다. 변경해도 일회성이다.

 

이것 저것 구글링 해가며 테스트 해보았지만 아래와 같이 작업했을때 자동로그인이 정상적으로 동작했다. 

PHP 개발환경에서는,  PHPSESSID 값이 쿠키에 들어있고, 이값으로 자동로그인을 처리하는데, 이 값이 앱이 종료되고, 다시 실행되어도 유지되는데 초점을 맞추었다. 

 

1) 자동로그인 후 PHPSESSID 값을 UserDefaults 에 저장한다.

if #available(iOS 11.0, *) {
    WKWebsiteDataStore.default().httpCookieStore.getAllCookies { (cookies) in
        for cookie in cookies{
            print("@@@ cookie ==> \(cookie.name) : \(cookie.value)")
            if cookie.name == "PHPSESSID" {
                UserDefaults.standard.set(cookie.value, forKey:"PHPSESSID")
                print("@@@ PHPSESSID  저장하기: \(cookie.value)")
            }
        }
    }
} else {
    // Fallback on earlier versions
}

 

2) 페이지가 불릴때마다 UserDefaults 에 저장된 PHPSESSID 값을 불러와서 일회성으로 PHPSESSID 쿠키값을 넣는다.

let cookie_domain = "m.yourserver.co.kr"

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    let loadedSessid = UserDefaults.standard.value(forKey: "PHPSESSID") as! String?
    if let temp = loadedSessid{
        print("@@@ PHPSESSID  저장~~: \(temp)")
        // 이게 정상동작하는듯.. 자동로그인 됨
        let cookieString : String = "document.cookie='PHPSESSID=\(temp);path=/;domain=\(cookie_domain);'"
        webView.evaluateJavaScript(cookieString)
    }
}    

 

참고 사이트

https://dogfootbirdfoot.tistory.com/27

https://taesulee.tistory.com/6

https://github.com/Kofktu/WKCookieWebView

https://stackoverflow.com/questions/39772007/wkwebview-persistent-storage-of-cookies

https://g-y-e-o-m.tistory.com/83

+ Recent posts