2012-01-19 13 views
5

मेरे पास UIWebView है जो उपयोगकर्ता प्रमाणीकरण वाली वेबसाइट लोड करता है। साइट एक प्रमाणीकरण कुकी बनाता है। जब ब्राउज़र में, जब तक आप अपनी कुकी साफ़ नहीं करते हैं, तब तक आप हमेशा लॉग इन रहेंगे। जब xCODE लोड होता है तो यह कुकी जार को देखते समय सूचीबद्ध कुकी देख सकता है लेकिन इसे वेब व्यू पर नहीं भेजा जाता है। मैं जानना चाहता हूं कि वेबव्यू को कैसे जागरूक करना है कि ऑथ कुकी वहां है इसलिए यह हर बार प्रमाणीकरण के लिए उपयोगकर्ता को संकेत देना जारी नहीं रखता है।आईओएस UIwebView ऑथ कुकीज़

उत्तर

7

आप वेबसाइट लॉगिन करने के लिए HTTP अनुरोध करने के लिए NSURLConnection क्लास का उपयोग कर सकते हैं और कुकी पुनर्प्राप्त कर सकते हैं। अनुरोध करने के लिए, बस NSURLConnection का एक उदाहरण बनाएं और इसे एक प्रतिनिधि ऑब्जेक्ट असाइन करें।

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/"]]; 
NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self]; 

फिर, एक प्रतिनिधि विधि को लागू करें।

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    NSHTTPURLResponse *HTTPResponse = (NSHTTPURLResponse *)response; 
    NSDictionary *fields = [HTTPResponse allHeaderFields]; 
    NSString *cookie = [fields valueForKey:"Set-Cookie"]; // It is your cookie 
} 

कुकी स्ट्रिंग को बनाए रखें या कॉपी करें। जब आप एक और अनुरोध करना चाहते हैं, तो इसे अपने NSURLRequest उदाहरण के अपने HTTP शीर्षलेख में जोड़ें।

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/"]]; 
[request addValue:cookie forHTTPHeaderField:"Cookie"]; 

कुकी किसी भी समय आप इस विधि कॉल कर सकते हैं हटाने के लिए:

NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
    for (NSHTTPCookie *each in [[[cookieStorage cookiesForURL:YOUR_URL] copy] autorelease]) { 
     [cookieStorage deleteCookie:each]; 
    } 
+0

ठीक है अपनी वेबसाइट के लिए .net aspxauth कुकी प्राप्त करने के लिए, मैं Xcode के लिए नया हूँ और मैं इस बारे में प्रश्न हैं। अगर वे बहुत सरल हैं तो मुझे नाम कॉल करने के लिए स्वतंत्र महसूस करें। AppDelegate.m फ़ाइल में मैं NSURL और NSURLConnection घोषित करने का प्रयास करता हूं और उन लोगों के बारे में एक कंपाइलर त्रुटि प्राप्त करता हूं जो साइनइन स्थिरांक नहीं हैं। मैंने प्रतिनिधि को AppDelagate.m में भी कार्यान्वित किया और वह संकलित करता है। एनएसएमयूटेबल मुझे नहीं पता कि किस विधि को जाना चाहिए। मुझे यकीन है कि यह सरल प्रश्न हैं लेकिन मुझे वास्तव में पता नहीं है। – Hector

2

मैं इस मुद्दे को हल किया। समस्या को कॉन्फ़िगरेशन के साथ करना है क्योंकि UIWebView को मानक वेब ब्राउज़र के रूप में नहीं देखा जा रहा है। मैं .NET और IIS के माध्यम से उपयोगकर्ता को प्रमाणित कर रहा हूं। मैंने अपनी वेबसाइट की App_Browser निर्देशिका में एक जेनेरिक.ब्रोसर फ़ाइल जोड़ा। फ़ाइल की सामग्री है:

<browsers> 
    <browser refID="Mozilla" > 
    <capabilities> 
     <capability name="cookies" value="true" /> 
    </capabilities> 
    </browser> 
    <browser refID="Default"> 
     <capabilities> 
     <capability name="cookies" value="true" /> 
     </capabilities> 
    </browser> 
</browsers> 

लाइन है कि सही करता मुद्दा क्षमता कुकी की अनुमति देने है।

समाधान मैं प्रयोग किया जाता के संदर्भ में था इस

Asp.Net Forms Authentication when using iPhone UIWebView

4

आप साझा कुकी स्टोरेज का उपयोग करके सभी वेबसाइटों से प्रमाणीकरण कुकी पढ़ सकते हैं।

NSHTTPCookie *cookie; 

NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
for (cookie in [cookieJar cookies]) 
{ 
    NSLog(@"%@", cookie); 
} 

या

NSArray *cookiesForURL = [cookieJar cookiesForURL: [NSURL URLWithString: **MYURL**]]; 

for (cookie in cookiesForURL) 
{ 
    if([cookie.name compare:@".ASPXAUTH"] == NSOrderedSame) 
    { 
     NSLog(@"%@", cookie); 
     break; 
    } 
} 
संबंधित मुद्दे