如何使用 asp.net mvc 3 和 c# 清除 cookie?

Posted

技术标签:

【中文标题】如何使用 asp.net mvc 3 和 c# 清除 cookie?【英文标题】:How do you clear cookies using asp.net mvc 3 and c#? 【发布时间】:2011-07-04 14:11:08 【问题描述】:

好的,我真的认为我这样做是正确的,但是 cookie 没有被清除。

 Session.Clear();
 HttpCookie c = Request.Cookies["MyCookie"];
 if (c != null)
 
     c = new HttpCookie("MyCookie");
     c["AT"] = null;
     c.Expires = DateTime.Now.AddDays(-1);
     Request.Cookies.Add(c);
 

 return RedirectToAction("Index", "Home");

当重定向发生时,它会再次找到 cookie 并继续前进,就好像我从未注销过一样。有什么想法吗?

【问题讨论】:

【参考方案1】:

你已经接近了。您需要使用 Response 对象写回浏览器:

if ( Request.Cookies["MyCookie"] != null )

    var c = new HttpCookie( "MyCookie" );
    c.Expires = DateTime.Now.AddDays( -1 );
    Response.Cookies.Add( c );

有关 MSDN 的更多信息,How to: Delete a Cookie。

【讨论】:

呸!不敢相信我把 Response 和 Request 搞混了。谢谢你的帮助!大卫 2017 年有什么新鲜事吗? @VikasRana 如今,自动驾驶汽车很受欢迎。 @UweKeim 非常感谢,我不知道这个:p【参考方案2】:

Cookie 存储在客户端,而不是服务器上,因此 Session.Clear 不会影响它们。此外,Request.Cookies 由 IIS 填充,并在每次请求页面时提供给您的页面;从该集合中添加/删除 cookie 没有任何作用。

尝试对 Response.Cookies 执行类似的操作。这应该会导致您的客户端用新的 cookie 覆盖旧的 cookie,导致它过期。

【讨论】:

【参考方案3】:

我这样做了,它可以清除(而不是删除)会话 cookie:

HttpContext.Response.Cookies.Set(new HttpCookie("cookie_name")Value = string.Empty);

根据 Metro 的回复,我创建了这个扩展方法以使代码可在任何控制器中重用。

/// <summary>
/// Deletes a cookie with specified name
/// </summary>
/// <param name="controller">extends the controller</param>
/// <param name="cookieName">cookie name</param>
public static void DeleteCookie(this Controller controller, string cookieName)

    if (controller.HttpContext.Request.Cookies[cookieName] == null)
            return; //cookie doesn't exist

    var c = new HttpCookie(cookieName)
                
                    Expires = DateTime.Now.AddDays(-1)
                ;
    controller.HttpContext.Response.Cookies.Add(c);

【讨论】:

尝试了几件事,只有 AuthorizationContext 并且您的解决方案终于奏效了

以上是关于如何使用 asp.net mvc 3 和 c# 清除 cookie?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Asp.net MVC C# 中使用 Linq 从多个表中选择具有最大计数值的记录

如何在 C# 页面 ASP.NET Core MVC 上使用 SignInManager 和 Usermanager

如何从 ASP.net MVC 程序中获取纯 c# 程序中的 JSON 数据?

如何在 C# 和 ASP.NET MVC 中读取/写入 cookie

使用 C# 在 ASP.NET MVC 3 中创建级联下拉列表的最简单方法

如何在 asp.net mvc C# 中使用 paypal 交易的交易 ID 获取交易详情?