2013-05-15 7 views
12

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

मैंने क्या प्रयास किया है?
मुझे लगता है कि समाधान दो UIWebView में विभिन्न कुकी स्टोरेज लागू करना है।

सास्मिटो आदिबोव ने एक लेख Implementing Your Own Cookie Storage लिखा जो मैक पर WebView के लिए कस्टम कुकी स्टोरेज का उपयोग करने के तरीके के विवरण प्रदान करता है।
यह NSURLRequest को संशोधित करके किया जाता है कि WebView भेजने के लिए जा रहा है, इसमें कुकी हेडर जोड़ना है, और WebView से प्रतिक्रिया को रोकना और प्रतिक्रिया शीर्षलेख से कुकीज़ निकालना और इसे अपने स्वयं के कुकी संग्रहण में सहेजना है। ,

- (NSURLRequest *)uiWebView:(UIWebView *)sender resource:(id)identifier willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse fromDataSource:(id)dataSource 

हालांकि:

- (void)webView:(WebView *)sender resource:(id)identifier didReceiveResponse:(NSURLResponse *)response fromDataSource:(WebDataSource *)dataSource 
- (NSURLRequest *)webView:(WebView *)sender resource:(id)identifier willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse fromDataSource:(WebDataSource *)dataSource 

हालांकि यह undocumented है, UIWebView समर्थन थोड़ी भिन्न विधि का नाम के साथ उपरोक्त विधि से एक किया:
तकनीकी तौर पर, यह इन दो प्रतिनिधि तरीकों को लागू करने से किया जाता है UIWebViewwebView:resource:didReceiveResponse:fromDataSource: के लिए समकक्ष प्रतिनिधि विधि नहीं है और इसलिए मैं प्रतिक्रिया शीर्षकों से कुकीज़ निकालने नहीं कर सकता।

प्रश्न
वहाँ एक कस्टम कुकी संग्रहण का उपयोग करना UIWebView के लिए एक रास्ता है, इसलिए दो UIWebView अपने स्वयं के कुकी स्टोरेज हो सकती है?

धन्यवाद!

NSHTTPCookie *cookie; 
NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
for (cookie in [cookieJar cookies]) { 
    [self.cookies addObject:cookie]; 
} 

और सही होने के बाद (self.cookies से मूल्यों और चाबी पुनर्प्राप्त करें) इन कुकी संग्रहीत:

उत्तर

1

आप एक विशेष वेब दृश्य के साथ संबद्ध कुकी हो रही (और उन्हें पकड़े) webViewDidStartLoad में करने की कोशिश की है

NSMutableDictionary *cookieDict = [NSMutableDictionary dictionary]; 
[cookieDict setObject:@"value1" forKey:NSHTTPCookieName]; 
[cookieDict setObject:@"value2" forKey:NSHTTPCookieValue]; 
[cookieDict setObject:@"value3" forKey:NSHTTPCookieDomain]; 
...etc.. 

NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieDict]; 
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie]; 

आप भी अपनी viewDidLoad में यह देखने के लिए की आवश्यकता होगी:

[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways]; 
+0

'webViewDidStartLoad' में, अनुरोध पहले से ही भेजा गया है, इसलिए आपका हैक काम नहीं करता है। इसे 'mustStartLoadWithRequest' पर ले जाना काम कर सकता है। हालांकि, आपका हैक UIWebView दोनों को एक साथ अनुरोध लोड करने की अनुमति नहीं देगा। – howanghk

+0

@bdev उत्तर मैं स्विफ्ट 3.0 में चाहता हूं मेरी मदद कर सकता है। –

0

यदि आप थोड़ा गहरा खोदने के इच्छुक हैं, तो इस्तेमाल होने वाले प्रसिद्ध ASIHttpRequest को पता था कि दिन में इसे वापस कैसे व्यवस्थित किया जाए। switching cookie storage for requests पढ़ें। उनके पास UIWebView अनुरोधों के लिए एक दिलचस्प रैपर भी है, AKA ASIWebPageRequest

अफसोस की बात है कि परियोजना को बंद कर दिया गया है, लेकिन यह आपको अपने लक्ष्य को प्राप्त करने के लिए एक ऑपरेशन ग्राउंड प्रदान करना चाहिए।

अन्यथा, जैसा कि बीडीईवी प्रस्तुत किया गया है, मैं अनुरोधों को पूरा करने से पहले अनुरोधों को कतार में रखूंगा और प्रत्येक बार कुकी स्टोरेज को प्रतिस्थापित कर दूंगा। आप यहाँ अच्छी तरह से प्रेषक का उपयोग कर सकते हैं।

संबंधित मुद्दे