17 4 2018

在决定网站才用邮件的形式回复消息后就需要用户补填邮箱信息了,我用的cookie存的用户资料,想要在用户补填邮箱后更新cookie。

刚开始是这样设置的:

HttpRequest req = HttpContext.Current.Request;
HttpCookie cookies = req.Cookies["UserInfo"];
if (cookies != null)
{
cookies.Values.Set("Email", email);
}

修改是成功了,但是浏览器获取的还是以前的值,于是换了另一种方式(网上查到博客说的) 如下:

HttpRequest req = HttpContext.Current.Request;
HttpCookie cookies = req.Cookies["UserInfo"];
if (cookies != null)
{
cookies.Values.Set("Email", email);
cookies.Expires = DateTime.Now.AddMinutes(-1);
}

调试依然失败了,最后求助同事一番测试后终于成功,下面是最终解决方案:

HttpRequest req = HttpContext.Current.Request;
HttpCookie cookies = req.Cookies["UserInfo"];
if (cookies != null)
{
cookies.Values.Set("Email", email);
//req.Cookies["LoginUser"].Values["Email"] = email;
cookies.Expires = DateTime.Now.Add(new TimeSpan(168, 0, 0)); HttpContext.Current.Response.AppendCookie(cookies);
}

总结:

1.修改cookie时如果不设置过期时间,浏览器会直接清除掉cookie。

2.设置过期时间为天可能会造成无效的bug,现在是精确到小时测试成功。(具体原因目前还不是很清楚)


延伸阅读
    发表评论