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中允许的字符