2016-02-16 4 views
6

के बीच सत्र को बनाए रखा नहीं है मेरे ऐप में मैं UIWebView के माध्यम से उपयोगकर्ता को लॉगिन करने का प्रयास कर रहा हूं। सफल लॉगिन कुकीज़ पर NSHTTPCookieStorage में सेट हैं। UIWebView में मेरे कुछ ऐप पेज खुले हैं।UIWebView

जब विशेष वेब पेज के लिए अनुरोध भेजता है, तो यह जांचता है कि उपयोगकर्ता लॉग इन है या नहीं, कुकीज़ पर आधारित है या नहीं।

मैंने जांच की कि कुकीज़ NSHTTPCookieStorage में मौजूद हैं, लेकिन सर्वर पर मान्य कुकीज़ नहीं हैं। यही है, यह उपयोगकर्ता को लॉग आउट उपयोगकर्ता के रूप में मानता है।

लोड UIWebView के लिए मेरे कोड के रूप में नीचे है:

let url = serverURL + urlString 
let urlRequest = NSMutableURLRequest(URL: NSURL(string: url)!) 
webPage.loadRequest(urlRequest) 

मुझे भी NSURLSession और HTTPHeaderField के रूप में कुकी सेट करने के साथ की कोशिश की। नीचे इसके लिए मेरा कोड भी है:

let URLRequest: NSMutableURLRequest = NSMutableURLRequest(URL: NSURL(string: url)!) 

let cookies = NSHTTPCookieStorage.sharedHTTPCookieStorage().cookiesForURL(NSURL(string: serverURL)!) 
for cookie in cookies!{ 
    URLRequest.setValue(cookie.value, forHTTPHeaderField: cookie.name) 
} 

let sessionConfig = NSURLSessionConfiguration.defaultSessionConfiguration() 
let session = NSURLSession(configuration: sessionConfig, delegate: self, delegateQueue: nil) 

let task = session.downloadTaskWithRequest(URLRequest) 
task.resume() 

यह कुछ मामलों के लिए ठीक से काम कर रहा है। मैं यह नहीं ढूंढ पा रहा हूं कि कुकीज़ के साथ क्या समस्या हो सकती है।

किसी भी मदद की सराहना की जाएगी।

अग्रिम धन्यवाद

+0

'WKWebView' (आईओएस 8+) की कोशिश करने पर विचार करें। इसके साथ आप पिछले प्रयुक्त इंस्टेंस से 'कॉन्फ़िगरेशन' प्रॉपर्टी को नए बनाए गए और _maybe_ पर कॉपी कर सकते हैं, यह कुकीज़ को सुरक्षित रखेगा। वैकल्पिक रूप से, ऐप के अलावा UIWebView के _one_ उदाहरण का उपयोग करें। – werediver

+0

मुझे इसी तरह की समस्या का सामना करना पड़ रहा है, कृपया –

उत्तर

0

निम्नलिखित कोड ऐसा नहीं करता है कि आप क्या करना चाहते हैं:

for cookie in cookies!{ 
    URLRequest.setValue(cookie.value, forHTTPHeaderField: cookie.name) 
} 

कुकीज़ HTTP पर भेजे जाते हैं, वे प्रारूप का एक Cookie शीर्षक में भेजा जाता है:

Cookie: cookie1=value1; cookie2=value2 

आप एकाधिक शीर्षलेख बना रहे हैं जिसका नाम कुकी नाम है, इसलिए आपका अनुरोध इस प्रकार दिखता है:

cookie1: value1 
cookie2: value2 

सही शीर्षलेख बनाने का सबसे आसान तरीका NSHTTPCookie.requestHeaderFieldsWithCookies(_:[NSHTTPCookie]) के साथ है। जब से तुम कोई अन्य हेडर जोड़ दिया है, तो आप बस कर सकता है:

if let cookies = NSHTTPCookieStorage.sharedHTTPCookieStorage().cookiesForURL(NSURL(string: serverURL)!) { 
    URLRequest.allHTTPHeaderFields = NSHTTPCookie.requestHeaderFieldsWithCookies(cookies) 
} 

एक के रूप में अलग रूप में, आप अपने अनुरोध के लिए और कुकीज़ को देख के लिए अलग-अलग URL का उपयोग कर रहे हैं। वे समान होना चाहिए क्योंकि कुकीज़ को किसी डोमेन में विशिष्ट पथों पर स्कॉप्ड किया जा सकता है।

+0

धन्यवाद @Brian निकेल की मदद करें। मैंने अपनी समस्या को इसी तरह हल किया, लेकिन जवाब जोड़ना भूल गया –