programing

UI WebView의 모든 쿠키를 삭제하는 방법은 무엇입니까?

bestprogram 2023. 7. 31. 21:31

UI WebView의 모든 쿠키를 삭제하는 방법은 무엇입니까?

내 지원서에, 나는.UIWebview로그인을 위해 인증 페이지에 링크를 로드합니다.사용자가 로그인하면 쿠키가 응용프로그램에 저장됩니다.

내 앱에는 linked in login과 관련이 없는 logout 버튼이 있습니다.그래서 사용자가 이 버튼을 클릭하면 앱에서 로그오프합니다.이 로그오프를 통해 앱에서 링크된 쿠키도 지워져 사용자가 완전히 로그아웃하기를 원합니다.

질문에 따르면 "쿠키 병"의 각 쿠키를 검토한 후 다음과 같이 삭제할 수 있습니다.

NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *cookie in [storage cookies]) {
   [storage deleteCookie:cookie];
}
[[NSUserDefaults standardUserDefaults] synchronize];

이와 관련된 정보를 추가하고 싶습니다.

OS X 10.9/iOS 7 이상에서는 -reset을 사용할 수 있습니다.CompletionHandler 사용: 전체 앱의 쿠키 및 캐시 등을 삭제합니다.sharedSession:

모든 쿠키, 캐시 및 자격 증명 저장소를 비우고, 디스크 파일을 제거하고, 디스크로 진행 중인 다운로드를 플러시하며, 향후 요청이 새 소켓에서 발생하도록 합니다.

[[NSURLSession sharedSession] resetWithCompletionHandler:^{
    // Do something once it's done.
}];

다음과 같은 For-In 루프deleteCookie:컬렉션을 열거하는 동안 수정하는 것처럼 들립니다. (몰라요, 나쁜 생각일 수도 있어요?)

웹뷰의 html 안에 쿠키를 정리하는 기능을 만들 수 있습니다.

Titanium 이벤트로 이 기능을 트리거할 수 있는 한 번만 클리닝을 수행해야 하는 경우 앱이 시작될 때만 해당됩니다.

MK WebView를 사용하는 경우 이전 답변이 도움이 되지 않았습니다.그래서 저는 다른 해결책을 찾았습니다.

func loadAuthUrl(_ url: URL) {
        
        let finally: VoidClosure = { [weak self] in
            guard let self = self else { return }
            let request = URLRequest(url: url, cachePolicy: .reloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 60.0)
            self.webView.load(request)
        }
        
        let cookieStore = webView.configuration.websiteDataStore.httpCookieStore
        cookieStore.getAllCookies({ [weak self] cookies in
            guard let _ = self else { return }
            let instagramCookies = cookies.filter({ $0.domain == ".instagram.com" })
            if instagramCookies.isEmpty {
                finally()
            } else {
                DispatchQueue.global().async(execute: {
                    let group = DispatchGroup()
                    for cookie in cookies {
                        group.enter()
                        cookieStore.delete(cookie, completionHandler: { group.leave() })
                    }
                    group.wait()
                    DispatchQueue.main.async(execute: finally)
                })
            }
        })
    }

Swift 솔루션을 찾는 사람이 있다면 다음과 같이 하십시오.

    let storage = HTTPCookieStorage.shared
    if let cookies = storage.cookies{
        for cookie in cookies {
             storage.deleteCookie(cookie)
        }
    }

언급URL : https://stackoverflow.com/questions/4471629/how-to-delete-all-cookies-of-uiwebview