दिलचस्प पोस्ट
एक डेटाबेस के साथ रीसाइक्लिव्यू का उपयोग करना PHP में वस्तु की संरक्षित संपत्ति कैसे प्राप्त करें संशोधित .resx फ़ाइल में सी # OSX पर स्विंग: कमांड-क्यू ट्रैप कैसे करें? मैं एक एमडी 5 हैश कैसे बना सकता हूँ? विजुअल स्टूडियो में ऐप चलाते समय प्रवेश डेटाबेस में बदलाव जारी नहीं रह जाता है एसएसएल की जांच कैसे करें मापदंडों के साथ मिलकर विभिन्न प्रतीकों (*, और, आदि) के बीच भेद क्या है? मेरे वाईफाई आईपी पता एंड्रॉइड प्राप्त करें मैं कमांड लाइन से एंड्रॉइड एमुलेटर कैसे लांच करूं? Mysql डेटाबेस से मेरी BLOB छवि दिखाने के लिए मुझे अपने PHP पृष्ठ की आवश्यकता है ओएस एक्स या आईओएस (जीस्टॉल्ट का उपयोग किए बिना) में रनटाइम पर मैं ओएस संस्करण कैसे निर्धारित करूं? 2 की एक सटीक के साथ दशमलव के लिए साधारण नियमित अभिव्यक्ति इनपुट के रूप में केवल मान्य इंट को स्वीकार करने के लिए स्कैनर का उपयोग कैसे करें जावा में डाटाबेस कनेक्शन बंद करना

आईपैड UIWebView का उपयोग करते समय Asp.Net प्रपत्र प्रमाणीकरण

मैं एक asp.net MVC 2 अनुप्रयोग लिख रहा हूँ जो फॉर्म प्रमाणीकरण का उपयोग करता है और वर्तमान में मुझे वेब पर प्रमाणीकरण / लॉगिन के संबंध में हमारे आईफ़ोन आवेदन के साथ समस्या आ रही है। हमने UIWebView नियंत्रण का उपयोग करने वाला एक सरल iPhone ऐप विकसित किया है इस स्तर पर, सभी ऐप हमारे एसपीएनसेट वेबसाइट पर नेविगेट करता है। सरल, सही? समस्या ये है, कि उपयोगकर्ता लॉगिन पेज से पहले नहीं जा सकता है। Repro कदम हैं:

  • ओपन आईफोन ऐप
  • एप्लिकेशन होम पेज पर नेविगेट करता है
  • उपयोगकर्ता प्रमाणीकृत नहीं है, इसलिए उन्हें लॉगिन स्क्रीन / पृष्ठ पर रीडायरेक्ट किया जाता है
  • उपयोगकर्ता सही उपयोगकर्ता नाम और पासवर्ड में प्रवेश करता है क्लिक सबमिट करें
  • सर्वर साइड पर, उपयोगकर्ता को प्रमाणित किया जाता है और एक कुकी बनाई जाती है और फार्मएट एटिफिकेशन का उपयोग कर ग्राहक को भेजा जाता है। GetAuthCookie
  • सर्वर भेजता है उपयोगकर्ता को सही होम पेज भेजने के लिए रीडायरेक्ट होता है।

लेकिन उपयोगकर्ता को फिर से लॉगिन स्क्रीन पर पुनः निर्देशित किया जाता है!

मैंने इस पर कुछ व्यापक डीबगिंग किया है और मुझे क्या पता है:

कुकी ग्राहक को भेजी जा रही है, और क्लाइंट कुकी संग्रहीत कर रहा है। यह iPhone डिबगर में और पृष्ठ पर कुकी डेटा प्रदर्शित करने के लिए जावास्क्रिप्ट का उपयोग करके भी सत्यापित किया गया है। कुकी को सर्वर पर वापस भेजा जा रहा है। इस दृश्य स्टूडियो डिबगर में सत्यापित यह सही कुकी है (यह वही है जिसे सेट किया गया था)। संपत्ति User.Identity.IsAuthenticated रिटर्न किसी कारण के लिए झूठ, यद्यपि auth कुकी अनुरोध ऑब्जेक्ट में शामिल है। मैंने सत्यापित किया है कि iPhone ऐप कुकीज़ को स्वीकार करने के लिए सेटअप है, और वे ग्राहक पर हैं।

यहां अजीब बात है: अगर आप iPhone पर सफ़ारी ब्राउज़र को खोलते हैं और सीधे हमारी साइट पर जाएं तो यह ठीक काम करता है

इसका आईपैड पर ऐसा व्यवहार भी है कि यह लॉगिन स्क्रीन से पहले नहीं मिलता है। यह emulators पर, और उपकरणों पर repros।

यह एक ही वेब साइट आईई 7-8, सफारी (विंडोज़ के लिए), ब्लैकबेरी, आईईमोबाइल 6.5, फोन 7 के साथ जांच की गई है और यह काम खोजने में काम करती है। IPhone ऐप में UIWebView केवल एक ही परिस्थिति पर काम नहीं करती I

वेब के समाधान से एकत्रित समाधान "आईपैड UIWebView का उपयोग करते समय Asp.Net प्रपत्र प्रमाणीकरण"

मुझे वही समस्या थी, लेकिन किसी अन्य डिवाइस (नोकियाएन 8) के साथ, और समस्या को उपयोगकर्ता-एजेंट पर वापस ले लिया।

IIS उपयोगकर्ता-एजेंट स्ट्रिंग के विरुद्ध मैच के लिए नियमित अभिव्यक्ति का उपयोग करता है I समस्या की जड़ यह थी कि इसकी विशिष्ट डिवाइस के लिए कोई भी नियमित रेग्युलर एक्सप्रेशन नहीं था, और मैच के निम्नतम स्तरों में समाप्त हो गया, जहां डिफ़ॉल्ट गुणों का उपयोग किया गया था। डिफ़ॉल्ट गुणों ने कहा कि ब्राउज़र कुकीज़ का समर्थन नहीं करता।

उपाय:

  1. अपने वेब प्रोजेक्ट में App_Browsers नामक फ़ोल्डर जोड़ें (प्रोजेक्ट को राइट-क्लिक करें, चुनें: Add > Add ASP.NET Folder > App_Browsers )।
  2. उस फ़ोल्डर में एक फ़ाइल जोड़ें (राइट-क्लिक करें, चुनें: Add > New Item )। फाइल में कोई नाम हो सकता है, लेकिन .browser समाप्त होने चाहिए।
  3. एक अच्छी मिलान अभिव्यक्ति और सही क्षमताओं को जोड़ें (या Default परिवर्तन जोड़)

दो उदाहरण:

 <browsers> <browser id="NokiaN8" parentID="Mozilla"> <identification> <userAgent match="NokiaN8" /> </identification> <capabilities> <capability name="browser" value="NokiaN8" /> <capability name="cookies" value="true" /> </capabilities> </browser> </browsers> 

या डिफ़ॉल्ट परिवर्तित करें:

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

अधिक जानकारी: ब्राउज़र परिभाषा फ़ाइल स्कीमा

हमने पाया कि एक फाइल (जेनरिक.ब्राउज़र) बनाने के लिए और वेब सर्वर को यह बताने के लिए कि "मोज़िला" और डिफ़ॉल्ट ब्राउज़र सेटिंग्स को सभी कुकीज़ का समर्थन करना चाहिए इस XML को शामिल करना था

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

यह asp.net 4.5 में तय हो गई है और सभी ब्राउज़रों को कुकीज़ का समर्थन करने के लिए माना जाता है, इसलिए अतिरिक्त। ब्राउजर फ़ाइल की आवश्यकता नहीं होगी।

मैंने जो शोध किया था, उस कारण से कि आप उपयोगकर्ता-एजेंट को सेट नहीं कर सकते हैं, यह है कि UIWebView उपयोगकर्ता-एजेंट मान सेट करने से पहले ही अनुरोध भेजता है, अर्थात, अपने कोड से आपके अनुरोध के बाद ।

इस समस्या को सुलझाने की चाल है "विधि स्विजिंग" नामक कुछ का उपयोग करना, एक उन्नत और संभावित खतरनाक उद्देश्य-सी अवधारणा जो आपके द्वारा प्रदान किए जाने वाले एक मानक विधि को स्वैप करता है अंतिम परिणाम यह है कि जब आपका अनुरोध भेजा जाता है और फ्रेमवर्क कोड यूजर-एजेंट को जोड़ता है तो यह आपके द्वारा दी गई विधि का उपयोग करने में बेवकूफ़ बनाया जाएगा।

निम्नलिखित बताते हैं कि मैंने इसे लागू करने के लिए क्या किया, लेकिन मैं कोई उद्देश्य-सी विशेषज्ञ नहीं हूं और तकनीक से खुद को जानने के लिए कुछ शोध करने के लिए आपको सुझाव देगा विशेष रूप से, वहाँ एक लिंक था, जिसमें मेरे से बेहतर बताया गया है कि यहां क्या हो रहा है, लेकिन फिलहाल मुझे यह नहीं मिल सकता है।

1) स्विजलिंग की अनुमति के लिए NSObject पर एक श्रेणी जोड़ें।

 @interface NSObject (Swizzle) + (BOOL) swizzleMethod:(SEL)origSelector withMethod:(SEL)newSelector; @end @implementation NSObject (Swizzle) + (BOOL) swizzleMethod:(SEL) origSelector withMethod:(SEL)newSelector { Method origMethod= class_getInstanceMethod(self, origSelector); Method newMethod= class_getInstanceMethod(self, newSelector); if (origMethod && newMethod) { if (class_addMethod(self, origSelector, method_getImplementation(newMethod), method_getTypeEncoding(newMethod))) { class_replaceMethod(self, newSelector, method_getImplementation(origMethod), method_getTypeEncoding(origMethod)); } else { method_exchangeImplementations(origMethod, newMethod); } return YES; } return NO; } @end 

2) स्क्वैशस एनएसएमयूटीबल यूआरआर स्विजल की अनुमति देने के लिए अनुरोध:

 @interface NSMutableURLRequest (MyMutableURLRequest) + (void) setupUserAgentOverwrite; @end @implementation NSMutableURLRequest (MyMutableURLRequest) - (void) newSetValue:(NSString*)value forHTTPHeaderField:(NSString*)field { if ([field isEqualToString:@"User-Agent"]) { value = USER_AGENT; // ie, the value I want to use. } [self newSetValue:value forHTTPHeaderField:field]; } + (void) setupUserAgentOverwrite { [self swizzleMethod:@selector(setValue:forHTTPHeaderField:) withMethod:@selector(newSetValue:forHTTPHeaderField:)]; } @end 

3) विधि को स्वैप करने के लिए स्थिर विधि को कॉल करें। मैंने यह कॉल किया था फ़िनिश लॉन्चिंगविथ विकल्प:

 // Need to call this method so that User-Agent get updated correctly: [NSMutableURLRequest setupUserAgentOverwrite]; 

4) और फिर इसे इस तरह इस्तेमाल किया। (कनेक्शन प्रतिनिधि एक अस्थायी सरणी में डेटा को सहेजता है और फिर लोड हो रहा है, तब मैन्युअल रूप से UIWebView को इसके लोडडेटा विधि का उपयोग करके सेट करता है)।

 - (void)loadWithURLString:(NSString*)urlString { NSURL *url = [NSURL URLWithString:urlString]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; _connection = [NSURLConnection connectionWithRequest:request delegate:self]; [_connection start]; } 

मेरे पास एक ही सटीक समस्या थी, शोध और समेकित एक संपूर्ण समाधान (ऊपर दिए गए उत्तर और अन्य धागे) से: http://www.bloggersworld.com/index.php/asp-net-forms-authentication-iphone-cookies/

  1. क्या आपने मार्कअप में एक गंतव्य पृष्ठ यूआरएल निर्दिष्ट किया है?

  2. क्या आपने web.config में defaultURL निर्दिष्ट किया है?

उदाहरण web.config

 <authentication mode="Forms"> <forms loginUrl="~/Login.aspx" defaultUrl="~/CustomerArea/Default.aspx"/> </authentication> 

उदाहरण DestinationPageUrl

  <asp:Login ID="Login" runat="server" DestinationPageUrl="~/Secret/Default.aspx" /> 

आखिरकार क्या आपने कुकी जार में देखा और देखा कि क्या आपका सत्र कुकी वास्तव में मौजूद है?

एक UIWebView के कुकीज़ कहाँ संग्रहीत हैं?

इस घटना के कारण जाहिरा तौर पर यह तथ्य है कि यदि उपयोगकर्ता-एजेंट नहीं जानता है तो ब्राउज़र को कुकीज़ स्वीकार नहीं करना है (जैसा कि अन्य लोगों ने उत्तर दिया है), और इसके बजाय IIS URL में ASPXAUTH मान डालता है।

हालांकि, MVC मार्ग प्रणाली ने जाहिरा तौर पर उस संभावना को याद किया, जो स्पष्ट रूप से एक बग है, और इसलिए यह गड़बड़ हो रही है।

कस्टम उपयोगकर्ता-एजेंट के साथ ब्रॉसर जोड़ते समय समस्या हल होती है, यह गारंटी नहीं देता कि अन्य उपयोगकर्ता-एजेंट भी हल हो जाएंगे, और वास्तव में मुझे यह पता चला है कि एंड्रॉइड के लिए के 9 ब्राउज़र भी इस समस्या का है, और इस तरह केवल एक समाधान है अगर कोई ऐसी लॉगिंग सिस्टम है जैसे एलमेह ऐसी त्रुटियों को ट्रैक करने के लिए

दूसरी तरफ एक डिफ़ॉल्ट जोड़ना सवाल उठाता है अगर यह सच है कि सभी ब्राउज़र्स कुकीज़ को स्वीकार करते हैं, जो जाहिरा तौर पर कारण है कि आईआईएस ऐसा क्यों नहीं मानता।

हालांकि उपयोगकर्ता-एजेंटों को जोड़ने के अलावा एक वैश्विक। एएसएक्स रेगनेटरउट्स () विधि में एक स्पष्ट हेन्डलर को अनदेखा कर सकता है, जो निम्नानुसार है:

  routes.MapRoute( "CookieLess", // Route name "(F({Cookie}))/{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults ); 

हालांकि इस मामले में किसी को कुकी-कम स्थिति के साथ मिलान करने के लिए सभी रूट प्रविष्टियों की प्रतिलिपि करना होगा, जब तक कि कोई कस्टम रूट हैंडलर लिखने वाला नहीं है।

या हम उपरोक्त कुकी-कम मार्ग का उपयोग उपयोगकर्ता को एक त्रुटि पेज को भेजने के लिए कर सकते हैं, जिसमें समझाया गया है कि उसका ब्राउज़र इस समय समर्थित नहीं है, और वेब-मास्टर को उपयोगकर्ता-एजेंट के साथ इसे संभालने के लिए एक अलर्ट भेजता है।