4

REST를 호출하는 서버가 쿠키를 내 iPhone으로 전달한다는 것을 발견했습니다. 또한 HTTP Basic Auth를 사용합니다.NSURLConnection, Basic Auth 및 Cookies 관련 문제

인증에 사용되는 계정을 변경할 수있는 앱이 있는데, didReceiveAuthenticationChallenge이 호출되지 않으므로 자격 증명을 변경해도 문제가되지 않습니다. 자격 증명이 내가 올바르게 이해 해요 경우 [request setHTTPShouldHandleCookies:NO]

궁금 설정

  • 변경 될 때마다 수동으로 쿠키를 제거

    • :

      가 나는 두 개의 잠재적 인 수정으로 보았다. 나는 NSURLRequestReloadIgnoringCacheData이 캐싱을 처리 할 것이라고 예상했지만, 그렇지는 않습니다.

      어떻게 해결할 수 있습니까?

      편집 : 난 그냥 NOshouldHandleCookies 설정을 시도해 봤지만 쿠키가 여전히 서버에 전달되는 것 같다.

  • 답변

    7

    롭, 정말 옳습니다. 문제가있는 것 같습니다. 일부 경우 쿠키가 설정되어 이전 인증 정보가 유지됩니다. 다른 사람은 당신과 같이 쿠키를 삭제해야 할 수도 있습니다 제안, 이것은 나에게 문제 해결 :

    - (void)clearCookiesForURL { 
        NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
        NSArray *cookies = [cookieStorage cookiesForURL:_URL]; 
        for (NSHTTPCookie *cookie in cookies) { 
         NSLog(@"Deleting cookie for domain: %@", [cookie domain]); 
         [cookieStorage deleteCookie:cookie]; 
        } 
        } 
    

    didReceiveAuthenticationChallenge getting called only once iPhone

    2

    안전 스위프트이 문제를 살펴 보자 :

    func clearCookies(forURL URL: NSURL) -> Void { 
        let cookieStorage = NSHTTPCookieStorage.sharedHTTPCookieStorage() 
        let cookies = cookieStorage.cookiesForURL(URL) ?? [] 
        for cookie in cookies { 
         print("Deleting cookie for domain: \(cookie.domain)") 
         cookieStorage.deleteCookie(cookie) 
        } 
    } 
    

    String을 받으려면 전화 번호부 NSURL 이니셜 라이저 :

    let cookies = NSURL(string: string).flatMap(cookieStorage.cookiesForURL) ?? []