【问题标题】:Delete cookie on clicking sign out单击退出时删除 cookie
【发布时间】:2011-10-28 02:49:49
【问题描述】:

我正在使用下面的代码创建 cookie,如何在另一个页面中读取 txtusername 值以及如何在单击退出时删除 cookie(退出代码)。我是编程新手,请帮忙。

  string cookiestr;
            HttpCookie ck;
            tkt = new FormsAuthenticationTicket(1, txtUserName.Value, DateTime.Now,
            DateTime.Now.AddMinutes(30), chkPersistCookie.Checked, "your custom data");
            cookiestr = FormsAuthentication.Encrypt(tkt);

            ck = new HttpCookie(FormsAuthentication.FormsCookieName, cookiestr);
            if (chkPersistCookie.Checked)
                ck.Expires = tkt.Expiration;
            ck.Path = FormsAuthentication.FormsCookiePath;
            Response.Cookies.Add(ck);

【问题讨论】:

  • 你真的不应该像那样替换你的整个代码。这与 11 分钟前的问题不同

标签: c# asp.net cookies


【解决方案1】:

您不应该将 password 存储为 cookie。这是一个非常大的安全威胁。要删除 cookie,您实际上只需要修改并使其过期。您不能真正删除它,即将它从用户的磁盘中删除。看看这个documentation

这是一个示例:

 HttpCookie aCookie;
    string cookieName;
    int limit = Request.Cookies.Count;
    for (int i=0; i<limit; i++)
    {
        cookieName = Request.Cookies[i].Name;
        aCookie = new HttpCookie(cookieName);
        aCookie.Expires = DateTime.Now.AddDays(-1); // make it expire yesterday
        Response.Cookies.Add(aCookie); // overwrite it
    }

【讨论】:

    【解决方案2】:

    您不能直接删除cookie,您必须将其设置为在当前日期之前过期:

    if (Request.Cookies["clienDetails"] != null)
    {
        HttpCookie myCookie = new HttpCookie("clienDetails");
        myCookie.Expires = DateTime.Now.AddDays(-1d);
        Response.Cookies.Add(myCookie);
    }
    

    您可以阅读更多关于它的信息here

    此外,我真的鼓励您不要编写自己的安全性,而是阅读asp.net membership。更安全,更易于使用。我可以看到您的安全模型中存在许多缺陷。将密码以纯文本形式存储在 cookie 中真的很糟糕。

    编辑: 由于您现在更改了代码,因此您必须这样做才能删除 cookie:

    if (Request.Cookies[FormsAuthentication.FormsCookieName] != null)
    {
        HttpCookie myCookie = new HttpCookie(FormsAuthentication.FormsCookieName);
        myCookie.Expires = DateTime.Now.AddDays(-1d);
        Response.Cookies.Add(myCookie);
    }
    

    【讨论】:

    • 好的,谢谢,但是如何读取 txtusername 值。当我存储密码和电子邮件 ID 而不加密 if(Request.Cookies["Cookiename"] != null) { Label8.文本 = Request.Cookies["cookiename"].Values["client_ID"].ToString(); }
    • @Gokul 试试 User.Identity.Name
    【解决方案3】:

    仅供参考,这对我使用 Chrome 69 并启用了 Continue where you left off 功能不起作用。 Firefox 的类似问题。禁用此功能对我有用。

    【讨论】:

      【解决方案4】:

      在我的情况下,这段代码有效:

      Response.Cookies.Delete("access_token");
      return Ok();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-07
        • 2016-06-14
        • 2020-04-08
        • 1970-01-01
        • 1970-01-01
        • 2020-05-21
        • 2022-11-21
        • 2013-02-11
        相关资源
        最近更新 更多