2011-03-16 8 views
5

Tengo un extraño problema en mi página de inicio de sesión en Asp.net, este problema solo ocurre con Safari.Extraño problema con las cookies en Safari y Asp.net

Cuando el usuario es validado, obtengo el nombre del usuario de la base de datos (el campo en la base de datos es UTF8) y lo guardo en una cookie. El problema es que cuando el usuario tiene un nombre con caracteres especiales, me redireccionan a la página de donde vengo sin iniciar sesión. Por ejemplo, "Moller" funciona bien y el usuario está conectado pero no "Møller".

De nuevo, esto solo ocurre con Safari y cuando tengo caracteres especiales en el nombre. La fila que no funciona es: Response.Cookies ["userInfo"] ["name"] = getNameFromUserid (userid);

Este es mi código:

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

alguna idea acerca de esto? – Martin

+0

¿Es el safari una versión de Windows o Mac/iOS? Tengo el mismo problema con mi aplicación asp.net, pero solo en la versión para Mac de Safari. –

Respuesta

6

Safari no se establece galletas con caracteres no ASCII en su valor y otros navegadores puede ser impredecible en cómo exhiben caracteres no ASCII. Como el punto y coma tampoco está permitido en los valores de cookies para ningún navegador, recomendaría usar UrlEncode/UrlDecode.

Si se acaba de escribir la cookie y no tiene control sobre la lectura/sitio mostrando el valor de poner en el URLDecode también se puede hacer algo como esto:

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

Esto asegurará la cadena completa está configurado en la cookie y Safari, Chrome, Firefox e IE aún reconocerán los códigos html incluso sin; y no requiere decodificación cuando se lee.

Para una respuesta más larga en las especificaciones de la galleta ver: Allowed characters in cookies

+0

¡Gracias por explicarme! Pero ahora el problema es que recibo un mensaje de error de asp.net "Se detectó un valor Request.Cookies potencialmente peligroso del cliente" cuando, por ejemplo, trato de usar "Müller" en mi cookie que está codificado para: "M & # 252 ". ¿Cómo puedo resolver este problema? – Martin

+3

La solución parece ser utilizar UrlEncode en su lugar: http://madskristensen.net/post/Cookies-and-Unicode-characters.aspx – Martin

+0

Gracias amigo! ¡Salvaste mi fecha límite! LoL! –

Cuestiones relacionadas