iOS WKWebView 설정 쿠키 및 User Agent

2831 단어
WKWebview에서 UserAgent 및 쿠키를 설정하는 방법
이러한 내용을 설명하기 전에 먼저 User Agent와 Cookie가 무엇인지 알아야 합니다.Useragent: 이 값은 보통 브라우저가 자신의 신분을 표시하는 데 사용하는 값입니다. 브라우저마다 다른 값이 있습니다.예를 들어 Safari의 상면값은 Mozilla/5.0(Macintosh, Intel Mac OS X 10 13 5) Apple WebKit/605.1.15(KHTML, like Gecko) Version/11.1.1 Safari/605.1.15 Cookie: 사용자의 상태를 유지하기 위한 역할로 HTTP의 헤더 필드로 정의되고 서비스 측은 응답 헤더를 통해 Set-Cookie로 돌아가 클라이언트에게 이 값을 저장하라고 지시할 수 있다. 클라이언트는 헤더 설정 쿠키를 요청하여 서비스 측에 이 필드의 값을 알려줄 수 있다.클라이언트와 서버의 세션 상태를 유지합니다
일반적인 개발에서 우리는 이 두 개의 가치 있는 설정과 관련될 수 있다. 이 두 개의 값은 WebView에서 비교적 잘 설정되지만 WKWebView에서 비교적 번거롭다.
WKWebView 설정 Useragent:
iOS9 이후 시스템은customUseragent API를 제공하여 직접 설정할 수 있지만 iOS8 시스템은 해당하는 API를 제공하지 않습니다.근데 저희가 다른 방식으로 설정할 수 있어요.
[WKWebView setValue:@"lsh token " forKey:@"applicationNameForUserAgent"];//KVC  

//               
UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectZero];

NSString *userAgent = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];

NSString*newUserAgent = [userAgentstringByAppendingString:@" origin/sfddjapp"];

newUserAgent = [newUserAgentstringByAppendingString:[NSStringstringWithFormat:@" token/%@",@"xxx -- xxx"]];

NSDictionary*dictionary = [NSDictionarydictionaryWithObjectsAndKeys:newUserAgent,@"UserAgent",nil];

[[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];

[[NSUserDefaults standardUserDefaults] synchronize];

PS: User Agent 설정 시 브라우저 형식과 최대한 일치
WKWebView 설정 쿠키
쿠키라는 문제는 매우 중요한 문제이다. 앱 안의 웹뷰와 네이티브의 동시 로그인 상태 등은 대부분이 쿠키에 사용된다.안타깝게도 WKWebView의 CooKie에 대한 지지는 정말 좋지 않다.iOS11 이후 시스템에 쿠키 설정 API 추가
//configuration  websiteDataStore.httpCookieStore    
[WKWebViewConfiguration.websiteDataStore.httpCookieStore setCookie:NSHTTPCookie completionHandler:^{
        
 }];

iOS11 이전에 어떻게 설정하는지 변경할까요? 일반적으로 Google 쿠키는 서버에서HTTPonly로 설정됩니다.이 필드는 쿠키가 요청으로만 보내는 것을 허용하고 전방이 문서를 통과하는 것을 허용하지 않는다는 뜻이다.쿠키 획득(Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; HttpOnly) 만약 우리가 전방에서 쿠키를 가져올 필요가 없다면 요청한 헤더에 쿠키 필드를 직접 주입하면 됩니다.
[request addValue:@"TeskCookieKey1=TeskCookieValue1;TeskCookieKey2=TeskCookieValue2;" forHTTPHeaderField:@"Cookie"];

만약 우리가 전방에서CooKie를 가져와야 한다면, 전방 페이지가 처음 불러올 때 스크립트를 주입해서 문서에 넣을 수 있습니다.쿠키 할당
WKUserScript * cookieScript = [[WKUserScript alloc]

                                   initWithSource: @"document.cookie = 'TeskCookieKey1=TeskCookieValue1';document.cookie = 'TeskCookieKey2=TeskCookieValue2';"

                                   injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO];

PS: 최대한 전방에서 쿠키를 가져오지 마세요. XSS 공격이 있으면 공격자가 쿠키를 가져올 수 있기 때문에 쿠키가 필요한 페이지를 방문할 수 있습니다.

좋은 웹페이지 즐겨찾기