2011-08-31 16 views
5

से प्रमाण पत्र साफ़ करें मैं यहां क्या कर रहा हूं, एक यूआरएल ला रहा है जिसमें प्रमाणीकरण है। इसलिए, मैं समारोहUIWebView

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge; 

का उपयोग करते हैं यह प्रमाणीकरण का सामना कर रहा, मैं एक UIAlertView यूज़रनेम और पासवर्ड दर्ज करने के लिए प्रस्तुत करते हैं और यदि उपयोगकर्ता इसे सही ढंग से प्रवेश किया है, इस विधि कहा जाता है।

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response; 

इस विधि में, मैं लॉगिन विंडो गायब हो जाता हूं और विस्तृत दृश्य लाता हूं।

समस्या उभरा, जब मैं लॉगआउट कार्यक्षमता चाहता था। मैं चाहता हूं कि उपयोगकर्ता द्वारा दर्ज किए गए प्रमाण-पत्रों को हटाएं और प्रमाणीकरण = उद्देश्य के लिए उस यूआरएल को दोबारा लाएं। इसलिए, मैं पर कॉल किया गया ReeceiveAuthenticationChallenge

लेकिन क्या होता है यह सीधे कुछ भी पूछे बिना didReceiveResponse विधि पर जाता है। यहां समस्या यह है कि मैं प्रमाण पत्र को साफ़ करने में सक्षम नहीं हूं। क्या आप इसे करने में मेरी मदद कर सकते हैं?

बहुत पहले से धन्यवाद! अनुरोध साफ़ कुकी के लिए

+1

मैं एक वेब दृश्य के साथ एक ही समस्या में भाग गया। इस सवाल पूछने के लिए धन्यवाद !! –

उत्तर

7

कोशिश कोड

NSHTTPCookie *cookie; 
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
for (cookie in [storage cookies]) 
{ 
    NSString* domainName = [cookie domain]; 
    NSRange domainRange = [domainName rangeOfString:@"twitter"]; 
    if(domainRange.length > 0) 
    { 
     [storage deleteCookie:cookie]; 
    } 
} 
+0

धन्यवाद! पूरी तरह से काम किया। मेरे मामले में मैं एक निश्चित स्ट्रिंग से जुड़े यूआरएल की तलाश नहीं कर रहा था, हालांकि। मैं सभी कुकीज़ को नकारना चाहता था इसलिए मैंने दूसरी पंक्ति को लूप के लिए सरल किया: नीचे दिए गए कोड के साथ उत्तर दें। –

+0

मेरी इच्छा है कि मैं दो बार वोट दे सकता हूं :) धन्यवाद बहुत – Hamid

3

मैं जानता हूँ कि यह एक पुराने सवाल है, लेकिन मैं इस सवाल का जवाब यहाँ है:

ऐसा लगता है कि कुकीज़ एक ही तरीका है कि नहीं कर रहे हैं UIWebView डेटा स्टोर करता है। वहाँ भी इस लगातार बात NSURLCredentialStorage कहा जाता है और यह स्पष्ट करने के लिए एक ही रास्ता इस प्रकार है:

NSLog(@"Logging out..."); 

// Clear credential storage 
NSURLCredentialStorage *credentialStorage = [NSURLCredentialStorage sharedCredentialStorage]; 
NSDictionary *credentialProtectionSpaces = [credentialStorage allCredentials]; 

for (NSURLProtectionSpace *protectionSpace in credentialProtectionSpaces) 
{ 
    NSDictionary *credentials = [credentialStorage credentialsForProtectionSpace:protectionSpace]; 
    for (NSString * username in credentials) 
    { 
     [credentialStorage removeCredential:[credentials objectForKey:username] forProtectionSpace:protectionSpace]; 
     NSLog(@"clearing: %@", username); 
    } 
} 

NSLog(@"checking..."); 

credentialStorage = [NSURLCredentialStorage sharedCredentialStorage]; 
credentialProtectionSpaces = [credentialStorage allCredentials]; 
for (NSURLProtectionSpace *protectionSpace in credentialProtectionSpaces) 
{ 
    NSDictionary *credentials = [credentialStorage credentialsForProtectionSpace:protectionSpace]; 
    for (NSString * username in credentials) 
    { 
     [credentialStorage removeCredential:[credentials objectForKey:username] forProtectionSpace:protectionSpace]; 
     NSLog(@"checking: %@", username); 
    } 
} 

You''ll पाते हैं कि उपयोगकर्ता नाम पहली बार दिखाते हैं, लेकिन नहीं दिखा जब एक ही के माध्यम से दूसरी बार जाँच पाश। उन्हें NSURLProtectionSpaces से हटा दिया गया है।

-Sean

+0

यह स्विफ्ट में कैसे किया जाएगा? 'सुरक्षा के लिए स्पेस: NSRLProtectionSpace क्रेडेंशियल प्रोग्रेस स्पेस {' त्रुटि देता है "(NSURLProtectionSpace, [स्ट्रिंग: NSURLCredential]) '(उर्फ' (NSRLProtectionSpace, शब्दकोश <स्ट्रिंग, NSURLCredential>) ')' NSURLProtectionSpace 'में परिवर्तनीय नहीं है – James

3

महान सवाल है, और मेरे मामले में मैं समझ नहीं सकता है कि हम क्यों एक वेब दृश्य से लॉग आउट नहीं कर सका।

मैंने पहले जवाब से कुछ कोड का उपयोग किया, लेकिन किसी निश्चित स्ट्रिंग या यूआरएल से जुड़े लोगों की बजाय पूरी चीज में सभी कुकीज़ को हटाना चाहता था। यहां मैंने जो किया है:

NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 

for (NSHTTPCookie *cookie in [cookieJar cookies]) { 
    [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie]; 
} 

और यह काम किया! अब जब आप लॉगआउट करते हैं तो यह हर बार मूल लॉगिन स्क्रीन पर वापस जाता है।

+0

क्या कोई तरीका है जावास्क्रिप्ट के माध्यम से ऐसा करने के लिए?मेरे पास एक वेब ऐप है (रेल/devise/omniauth-facebook) और UIWebView से प्रमाण-पत्र नहीं हटा सकता है। मैं यहाँ में अधिक विवरण के साथ इस पूछा: http://stackoverflow.com/questions/37687130/clear-credentials-from-uiwebview-with-javascript – Horacio