点击注销后删除cookie

9

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

我正在使用以下代码创建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分钟前不是同一个问题了。 - Oskar Kjellin
4个回答

14
你不应该将密码作为cookie存储,这是非常大的安全隐患。要删除cookie,你只需要修改并使其过期即可。你无法真正删除它,也就是从用户的磁盘中删除它。请查看这个文档
这是一个示例:
 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
    }

7
您不能直接删除cookie,您必须将其设置为在当前日期之前过期:
if (Request.Cookies["clienDetails"] != null)
{
    HttpCookie myCookie = new HttpCookie("clienDetails");
    myCookie.Expires = DateTime.Now.AddDays(-1d);
    Response.Cookies.Add(myCookie);
}

这里可以阅读更多相关信息

此外,我强烈建议您不要编写自己的安全性,而是了解asp.net成员资格。更安全,更易于使用。因为我发现您的安全模型存在许多漏洞。在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的值呢?当我未加密存储密码和邮箱时,下面的代码有效。if(Request.Cookies["Cookiename"] != null) { Label8.Text = Request.Cookies["cookiename"].Values["client_ID"].ToString(); } - rookie
@Gokul 尝试使用 User.Identity.Name - Oskar Kjellin

1
在我的情况下,这段代码有效:
Response.Cookies.Delete("access_token");
return Ok();

这在我使用的.Net 7 Razor页面中有效。看起来他们终于添加了一个简单的方法。 - Norbert Norbertson
这在我的.Net 7 Razor页面中起作用。看起来他们终于添加了一个简单的方法。 - undefined

0

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