单击退出时删除 cookie

Posted

技术标签:

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

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

  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 分钟前的问题不同 【参考方案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 的类似问题。禁用此功能对我有用。

Chrome doesn't delete session cookies How to delete or expire a cookie in Chrome using Asp.Net

【讨论】:

【参考方案4】:

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

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

【讨论】:

以上是关于单击退出时删除 cookie的主要内容,如果未能解决你的问题,请参考以下文章

注销和删除 Cookies [重定向到主页]

怎么删除无痕浏览

Edge浏览器怎样设置退出时删除浏览历史记录?

第24章 退出

关于Cookie的知识的总结

弹出U盘移动硬盘退出时提示被占用怎么解决方法