2011-03-16 11 views
5

मुझे Asp.net में मेरे लॉगिन पेज पर एक अजीब समस्या है, यह समस्या केवल सफारी के साथ होती है।सफारी और Asp.net में कुकीज़ के साथ अजीब समस्या

जब उपयोगकर्ता मान्य होता है तो मैं डेटाबेस से उपयोगकर्ता का नाम प्राप्त करता हूं (डेटाबेस में फ़ील्ड UTF8 है) और इसे कुकी में सहेजें। समस्या यह है कि जब उपयोगकर्ता के पास विशेष वर्णों वाला नाम होता है तो मुझे उस पृष्ठ पर रीडायरेक्ट किया जाता है जहां मैं लॉग इन किए बिना आया था। उदाहरण के लिए "मॉलर" ठीक काम करता है और उपयोगकर्ता लॉग इन होता है लेकिन "मोलर" नहीं।

फिर यह केवल सफारी के साथ हो रहा है और जब मेरे नाम पर विशेष पात्र हैं। वह पंक्ति जो काम नहीं कर रही है वह है: Response.Cookies ["userInfo"] ["name"] = getNameFromUserid (userid);

string userid = validUserWithEmail(TextBoxEmail.Text, TextBoxPassword.Text); 
if (userid != null) { 
    //VALID USER 
    Response.Cookies["userInfo"].Expires = DateTime.Now.AddDays(30); 
    Response.Cookies["userInfo"]["name"] = getNameFromUserid(userid); 

    FormsAuthentication.RedirectFromLoginPage(userid, CheckBoxPersistCookie.Checked); 
} 
else 
{ 
    //NOT A VALID USER SHOW A MESSAGE FOR THE USER OR SOMETHING 
} 
+0

इस बारे में कोई भी विचार? – Martin

+0

सफारी एक विंडोज या मैक/आईओएस संस्करण है? मेरे एएसपीनेट एप्लिकेशन के साथ एक ही समस्या है, लेकिन केवल सफारी के मैक संस्करण पर। –

उत्तर

6

सफारी उनके मूल्य और अन्य ब्राउज़र में गैर- ASCII वर्ण के साथ कुकीज़ सेट नहीं होगा कि वे किस तरह गैर- ASCII वर्ण प्रदर्शित में अप्रत्याशित हो सकते हैं:

यह मेरा कोड है। चूंकि किसी भी ब्राउज़र के लिए कुकी मूल्यों में सेमी-कोलन की अनुमति नहीं है, इसलिए मैं UrlEncode/UrlDecode का उपयोग करने की अनुशंसा करता हूं।

तुम सिर्फ कुकी लिख रहे हैं, तो और साइट पर पढ़ने पर नियंत्रण की जरूरत नहीं है/मूल्य प्रदर्शित URLDecode में डालने के लिए आप भी कुछ इस तरह कर सकते हैं:

ckCookie.Value = (Server.HtmlEncode(strSpecialCharacters)).Replace(";",""); 

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

कुकी चश्मा पर एक लंबे समय तक जवाब के लिए देखें: Allowed characters in cookies

+0

व्याख्या करने के लिए धन्यवाद! लेकिन समस्या अब इसके बजाय है कि मुझे एएसपीनेट त्रुटि संदेश मिलता है "क्लाइंट से संभावित रूप से खतरनाक अनुरोध। कुकीज मान का पता लगाया गया था" उदाहरण के लिए जब मेरी कुकी में "मल्लर" का उपयोग करने की कोशिश की जा रही है: "एम & # 252 "। कैसे मैं इस मुद्दे को हल कर सकता हूँ? – Martin

+3

समाधान इसके बजाय UrlEncode का उपयोग करना प्रतीत होता है: http://madskristensen.net/post/Cookies-and-Unicode-characters.aspx – Martin

+0

धन्यवाद दोस्त! आपने मेरी समयसीमा बचाई! जबरदस्त हंसी! –

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