保存cookie时会话丢失。

5

成功登录后,我想要保存一个包含用户名的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);

非常感谢任何帮助,谢谢。


3
你提到的session指的是什么?ASP.NET Session还是表单验证的session?此外,你具体执行了哪些操作?你在其中是否关闭了浏览器? - Darin Dimitrov
当从登录表单导航到下一个表单时,ASP.NET会话正在重置。这仅在添加上述代码后发生。 - Gareth Williams
以上代码是在登录表单中还是其他地方? - M3NTA7
你如何看待 ASP.NET 会话被重置的情况?你是否会获得一个新的 SessionID,还是通过 Session["YourKey"] 存储的值消失了?我认为你混淆了 Asp.net 会话,并且实际上在谈论无法再次登录的问题。 - Mathias F
您保存在其中一个 cookie 中的数据大小是否很大?cookie 大小有限制。 - Mathias F
显示剩余2条评论
2个回答

2

可能有些冒险,但是您是不是从https转到http?例如,登录表单是https,接下来的页面是http。

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

谢谢, Fran


1

我最近看到一篇文章,提到页面名称中的下划线可能会导致cookie问题,我还没有深入研究,但值得检查一下。

或者,如果用户不选择记住登录信息,您是否清除了他们的cookie?

我最近在MSDN上看到一个旧的示例,显示delete方法将删除您的会话...阅读文章

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

文章代码的(非常)快速C#翻译:

    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 中使用子键。


非常好,谢谢。当我“不记住”用户名cookie时,会丢失会话变量,因为我删除了所有的cookie对象,包括会话ID。再次感谢。 - Gareth Williams

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接