Странная проблема с куки в Safari и Asp.net - PullRequest
6 голосов
/ 16 марта 2011

У меня странная проблема на моей странице входа в Asp.net, эта проблема возникает только с Safari.

Когда пользователь проверяется, я выбираю имя пользователя из базы данных (поле в базе данныхUTF8) и сохраните его в файле cookie.Проблема в том, что когда у пользователя есть имя со специальными символами, меня перенаправляют на страницу, откуда я пришел, без входа в систему. Например, «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
}

1 Ответ

7 голосов
/ 28 апреля 2011

Safari не будет устанавливать куки с не-ASCII-символами в своем значении, и другие браузеры могут быть непредсказуемыми в том, как они отображают не-ASCII-символы. Так как точка с запятой также не допускается в значениях cookie для любого браузера, я бы рекомендовал использовать UrlEncode / UrlDecode.

Если вы просто пишете куки-файл и не имеете контроля над чтением / отображением на сайте значения для вставки URL-кода, вы также можете сделать что-то вроде этого:

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

Это обеспечит установку полной строки в файле cookie, а Safari, Chrome, Firefox и IE по-прежнему будут распознавать HTML-коды даже без; и не требует декодирования при чтении.

Более подробный ответ о спецификациях cookie смотрите: Допустимые символы в cookie

...