加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 07:03:14 所属栏目:asp.Net 来源:网络整理
导读:我在 Asp.net的登录页面上有一个奇怪的问题,这个问题只发生在Safari上. 验证用户后,我从数据库中获取用户的名称(数据库中的字段为UTF8)并将其保存在cookie中.问题是,当用户的名字带有特殊字符时,我会被重定向到我来自的页面而不登录.例如“Moller”工作正常,
我在 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不会在其值中设置包含非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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读