0

사용자가 로그인되어있는 동안 세션 객체와 통신 할 온라인 백엔드 서버와 사용자의 웹 세션을 유지 관리하는 서브 클래 싱 된 UIWebView는 상당히 추악한 문제가 있습니다. 특정 서비스. 가끔 내 앱은 GDC가있는 백그라운드 스레드에서 데이터 업데이트 서비스를 실행하고 NSURLSessionDataTask를 사용하여 백엔드 요청을 수행합니다.다른 스레드의 NSURLSessionDataTask가 UIWebView의 세션 쿠키를 삭제합니다.

백그라운드 스레드 작업으로 인해 UIWebView가 유지 관리하는 웹 세션 개체가 손상됩니다. 내 이해에서, 그건 NSHTTPCookieStorage가 손상된 것을 의미합니다 ... 나는 이것을 정확히 모릅니다.

UIWebView에 의해 유지되는 세션이 다른 스레드에서 실행중인 NSURLSessionDataTask에 의해 수행 된 다른 요청과 공유되는 경우 도움이 될 것이라고 생각합니다.

이전에는 UIWebView 세션이 활성화되어있는 동안 NSURLSessionDataTask 작업에 대한 호출을 억제했습니다. 그러나 일부 상황에서는 이러한 호출 중 하나가 여전히 발생합니다.

비록 내 질문 : UIWebView에 의해 NSURLSessionDataTask 활동을 사용하여 동일한 세션 공간을 공유 할 수 있습니까? 나는 샘플 코드를 제공 할 수없는 모두 구현의 복잡성으로 인해 불행하게도

, ... 대부분 NSURLSessionDataTask에 사용되는 웹 세션으로 [NSURLSessionConfiguration defaultSessionConfiguration]를 호출하면있는 UIWebView의 데이터로 나누기 것으로 보인다

+0

쿠키 저장소가 손상 되었습니까? 전에 (여전히 작동 중일 때) NSHTTPCookieStorage.sharedHTTPCookieStorage.cookies' 배열을 비교 했습니까? – izerik

+0

@izerik 일단 테스트를 거친 후에는 UIWebView에서 사용하는이 배열의 주 스레드 값에 올바른 데이터가있는 반면 전역 큐의 NSHTTPCookieStorage.sharedHTTPCookieStorage.cookies는 비어 있습니다. 공유 저장 장치가 동일한 데이터를 제공해야하는 싱글 톤이라고 가정 했으므로 이상했다. 아마 스레드 안전하지 않을 수 있겠는가? – konran

답변

0

...에서 적어도 그것은 손상되어 더 이상 사용할 수 없습니다.

대신 [NSURLSessionConfiguration ephemeralSessionConfiguration]을 사용하면 트릭과 UIWebView의 데이터가 그대로 유지됩니다.