반응형
Http Request(URLRequest)에서 받은 쿠키를 저장 한 후, WKWebView에 저장한 쿠키를 세팅하기
- 로그인 REST API를 호출한 후 응답값에서 쿠키를 추출 한후 뒤에 보여지는 WKWebView에 해당 쿠키를 세팅하여, 서버에서 동일한 세션으로 인식되게 한다.
- 쿠키를 동기화 시키지 않아, 서버에서 새로운 세션으로 인식해 버리게 되는것을 방지한다.
1. 저장할 쿠키를 임의 위치(Common.swift)의 전역변수에 저장한다.
//API, Webview 간의 쿠기 공유
static var cookies: [HTTPCookie]?
2. Http Request(URLRequest)에서 받은 쿠키를 저장한다.
//로그인 REST API호출
let param = "action=login&id=\(id)&pass=\(pass)";//요청param
let paramData = param.data(using: .utf8)
let url = URL(string : "http://www.myserver.co.kr/LoginServlet");//요청url
var request = URLRequest(url: url!)
request.httpMethod = "POST"
request.httpBody = paramData;
request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.setValue(String(paramData!.count), forHTTPHeaderField: "content-Length")
//요청하기
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
if let e = error {
NSLog("An error has occurred: \(e.localizedDescription)")
return;
}
//---쿠키 저장하기-------------------
if let httpResponse = response as? HTTPURLResponse, let fields = httpResponse.allHeaderFields as? [String : String] {
let cookies: [HTTPCookie] = HTTPCookie.cookies(withResponseHeaderFields: fields, for: response!.url!)
Common.cookies = cookies
}
//-----------------------------------
//응답처리
DispatchQueue.main.async {
let jsonString = String(bytes: data!, encoding: .utf8)
let decoder = JSONDecoder()
var data = jsonString!.data(using: .utf8)
if let data = data, let voLogin = try? decoder.decode(VoLogin.self, from: data) {
if(voLogin.result == "success") {
//성공 처리
} else {
//실패 처리
let alert = UIAlertController(title: "알림", message: voLogin.message, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "확인", style: .default) { action in
})
self.present(alert, animated: true, completion: nil)
}
}
else {
let alert = UIAlertController(title: "알림", message: "로그인을 실패했습니다.", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "확인", style: .default) { action in
})
self.present(alert, animated: true, completion: nil)
}
}
}
task.resume(); //POST전송
3. 저장된 쿠키를 WKWebView에 세팅한다.(초기화 위치에 삽입)
//WKWebview 쿠키 셋팅
if Common.cookies != nil {
for cookie in Common.cookies! {
webview.configuration.websiteDataStore.httpCookieStore.setCookie(cookie, completionHandler: nil)
}
}
반응형
'아이폰' 카테고리의 다른 글
Swift Target 13미만 시 UIScene, UISceneConfigration, .. Error (0) | 2021.11.20 |
---|---|
Swift 카메라 플래시 On/Off (0) | 2021.11.20 |
Swift 타이머(Timer) 사용 (0) | 2021.11.20 |
Swift UIImageView + URL이미지 (0) | 2021.11.20 |
Swift 키보드 Show/Hide 이벤트, 화면 밖 터치로 내리기 (0) | 2021.11.20 |
최근댓글