2011-03-16 7 views
5

Asp.net의 로그인 페이지에 이상한 문제가 있습니다.이 문제는 Safari에서만 발생합니다.Safari 및 Asp.net의 쿠키와 관련된 이상한 문제

사용자의 유효성을 검사하면 데이터베이스에서 사용자 이름을 가져오고 (데이터베이스의 필드는 UTF8 임) 쿠키에 저장합니다. 문제는 사용자가 특수 문자가있는 이름을 가지고있을 때 로그인하지 않은 페이지로 리디렉션된다는 것입니다. 예를 들어 "Moller"는 잘 작동하고 사용자는 "Møller"가 아니라 로그인되어 있습니다.

또 다시 Safari에서만이 이름에 특수 문자가있을 때만 발생합니다. 작동하지 않는 행은 다음과 같습니다. 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

Safari는 Windows 또는 Mac/iOS 버전입니까? 내 asp.net 응용 프로그램과 동일한 문제가 있지만 Safari의 Mac 버전에서만 발생합니다. –

답변

6

사파리 그들이 비 ASCII 문자를 표시하는 방법에 예측할 수 없습니다 자신의 가치와 다른 브라우저에서 비 ASCII 문자 쿠키를 설정하지 않습니다

이 내 코드입니다. 세미콜론도 모든 브라우저의 쿠키 값에 허용되지 않으므로 UrlEncode/UrlDecode를 사용하는 것이 좋습니다.

당신이이 같은 것을 할 수있는 URLDECODE에 넣어 값을 표시/단지 쿠키를 작성하고 사이트 판독을 제어 할 수없는 경우 :

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

이 전체 문자열을 보장을 쿠키 및 Safari, Chrome, Firefox 및 IE에 설정되어 있어도 HTML 코드를 인식하지 못합니다. 읽을 때 디코딩을 필요로하지 않습니다. 쿠키 사양에 더 이상 대답을

볼이 약 Allowed characters in cookies

+0

설명해 주셔서 감사합니다! 하지만 문제는 이제 대신 asp.net 오류 메시지가 "잠재적으로 위험한 Request.Cookies 값이 클라이언트에서 탐지되었습니다."라고 인코딩 된 쿠키에 "Müller"를 사용하려고 할 때 문제가 발생합니다. "M & # 252 ". 이 문제를 어떻게 해결할 수 있습니까? – Martin

+3

솔루션 대신 UrlEncode를 사용하는 것 같습니다 : http://madskristensen.net/post/Cookies-and-Unicode-characters.aspx – Martin

+0

고마워! 내 마감 시간을 저장 했어! LoL! –

관련 문제