Safari和Asp.net中的cookie存在奇怪的问题

Mar*_*tin 6 asp.net cookies safari redirect forms-authentication

我在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
}
Run Code Online (Sandbox Code Playgroud)

小智 7

Safari不会在其值中设置包含非ASCII字符的cookie,而其他浏览器在显示非ASCII字符时可能无法预测.由于任何浏览器的cookie值都不允许使用分号,我建议使用UrlEncode/UrlDecode.

如果您只是编写cookie并且无法控制站点读取/显示要放入URLDecode的值,您还可以执行以下操作:

ckCookie.Value = (Server.HtmlEncode( strSpecialCharacters )).Replace(";","");
Run Code Online (Sandbox Code Playgroud)

这将确保在cookie中设置完整的字符串,Safari,Chrome,Firefox和IE仍然可以识别html代码,即使没有; 并且在读取时不需要解码.

有关cookie规范的更长答案,请参阅:Cookie中允许的字符

  • 解决方案似乎是使用UrlEncode:http://madskristensen.net/post/Cookies-and-Unicode-characters.aspx (3认同)