保存cookie时会话丢失

时间:2012-01-30 15:55:37

标签: c# asp.net session cookies

成功登录后,我想保存一个包含用户名的cookie。

Cookie正确保存并正确加载用户名但丢失了会话!

检索用户名的代码是:

if (Request.Cookies["userName"] != null)
{
  txtEmail.Text = Request.Cookies["username"].Value;
  chkRemember.Checked = true;
}

保存用户名的代码是:

HttpCookie aCookie = new HttpCookie("username");
aCookie.Value = txtEmail.Text;
aCookie.Expires = DateTime.Now.AddYears(5);
Response.Cookies.Add(aCookie);

非常感谢任何帮助,谢谢

2 个答案:

答案 0 :(得分:2)

有点狂野,但你是否正在从https转向http?例如。登录表单为https,以下页面为http

如果是这样,大多数浏览器都会丢弃会话cookie。

谢谢, 弗兰

答案 1 :(得分:1)

我最近看到一篇文章表明页面名称中的下划线可能会导致cookie出现问题,我没有对此进行过调查,但可能值得一试。

或者,如果用户不选择记住,您是否清除了Cookie?

我最近在MSDN上看到了一个旧示例,显示了删除会话的删除方法...... read the article

如果是这样,请确保只删除登录的cookie,否则您可能会丢失包含sessionid的cookie。

快速翻译成文章代码的csharp:

    for (int i = 0; i < limit; i++)
    {
        cookieName = Request.Cookies[i].Name;
        aCookie = new HttpCookie(cookieName);
        aCookie.Expires = DateTime.Now.AddDays(-1);
        Response.Cookies.Add(aCookie);
    }

解决方案是添加对cookie名称的检查。

    for (int i = 0; i < limit; i++)
    {
        cookieName = Request.Cookies[i].Name;
        if (cookieName == "username")
        {
            aCookie = new HttpCookie(cookieName);
            aCookie.Expires = DateTime.Now.AddDays(-1);
            Response.Cookies.Add(aCookie);
        }
    }

另外请不要忘记您可以在Cookie中使用子键。

相关问题