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

时间:2011-03-16 15:11:26

标签: asp.net cookies redirect safari 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
}

1 个答案:

答案 0 :(得分:7)

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

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

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

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

有关Cookie规范的更长答案,请参阅:Allowed characters in cookies