【问题标题】:Strange problem with cookies in Safari and Asp.netSafari 和 Asp.net 中 cookie 的奇怪问题
【发布时间】:2011-04-28 21:28:20
【问题描述】:

我在 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
}

【问题讨论】:

  • Safari 是 Windows 还是 Mac / iOS 版本?我的 asp.net 应用程序也有同样的问题,但仅限于 Mac 版本的 Safari。

标签: asp.net cookies redirect safari forms-authentication


【解决方案1】:

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

【讨论】:

  • 感谢您的解释!但现在的问题是,当我尝试在我的 cookie 中使用“Müller”编码为:“Mü ”。我该如何解决这个问题?
  • 解决方案似乎是使用 UrlEncode 代替:madskristensen.net/post/Cookies-and-Unicode-characters.aspx
  • 谢谢老兄!你救了我的最后期限!大声笑!
  • @Martin 您在评论中提到的页面,现在不包含预期的内容 :( 在这种情况下,我强烈建议在 SO 此处创建包含内容的答案。这是因为大多数链接随时间下降或变化
猜你喜欢
  • 2016-01-31
  • 1970-01-01
  • 1970-01-01
  • 2011-01-09
  • 1970-01-01
  • 1970-01-01
  • 2015-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多