删除和删除我的asp.net c-sharp应用程序的所有cookie

本文关键字:删除 cookie 应用程序 c-sharp 我的 asp net | 更新日期: 2023-09-27 18:06:25

我需要在发送消息电子邮件后删除我的 asp.net c-sharp应用程序的所有cookie。

我已经尝试了这个解决方案,但没有成功,因为我有这个错误。

Server cannot modify cookies after HTTP headers have been sent.

这一行:

HttpContext.Current.Response.Cookies.Add(expiredCookie);

短信邮件定时启动。

谷歌搜索对我没有帮助。

有人知道我怎么解决这个问题吗?

你能建议一下吗?

你能帮我吗?

我的代码如下。

提前谢谢你。

private void ExpireAllCookies()
{
    if (HttpContext.Current != null)
    {
        int cookieCount = HttpContext.Current.Request.Cookies.Count;
        for (var i = 0; i < cookieCount; i++)
        {
            var cookie = HttpContext.Current.Request.Cookies[i];
            if (cookie != null)
            {
                var cookieName = cookie.Name;
                var expiredCookie = new HttpCookie(cookieName) { Expires = DateTime.Now.AddDays(-1) };
                HttpContext.Current.Response.Cookies.Add(expiredCookie);
            }
        }
        HttpContext.Current.Request.Cookies.Clear();
    }
}

............
    {
        smtpClient.Send(mailMessagePlainText);
        ExpireAllCookies();
        Page.ClientScript.RegisterStartupScript(this.GetType(), "Alert", "alert('Ok.');window.location='http://...';", true);
    }
    catch (Exception ex)
    {
        throw (ex);
    }

删除和删除我的asp.net c-sharp应用程序的所有cookie

实际上,没有办法正确地做到这一点。

考虑以下代码:

foreach (string key in Request.Cookies.AllKeys)
{
   HttpCookie c = Request.Cookies[key];
   c.Expires = DateTime.Now.AddMonths(-1);
   Response.AppendCookie(c);
}

这将工作,但只有当所有cookie都设置在根路径上,即/。如果cookie被设置为虚拟目录,它将不起作用,因为cookie的路径不会随cookie一起发送。cookie只发送名称和值,不发送其他内容,也就是说,不发送路径。

因此,如果您想用上述方法删除服务器上的cookie,它将无法删除所有具有路径/Kamikatze/

的cookie,例如

所以更正确的变体应该是:

Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
    context.Response.ContentType = "text/plain"
    context.Response.Write("Die folgenden Cookies wurden gelöscht: ")
    If context.Session IsNot Nothing Then
        context.Session.Clear()
        context.Session.Abandon()
    End If
    For Each key As String In context.Request.Cookies.AllKeys
        context.Response.Write(key)
        context.Response.Write(System.Environment.NewLine)
        Dim c As HttpCookie = context.Request.Cookies(key)
        ' Here, the proc2-cookie is set on the VirtualPath ... '
        ' You need to handle all non-root cookies here, with if or switch or dictionary ' 
        If "proc2".Equals(key, StringComparison.InvariantCultureIgnoreCase) Then
            c.Path = System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath + "/"
        End If
        ' For Set-Cookie without domain attribute, 
        ' the cookie's domain value is "the origin server".
        ' treat an absent Domain attribute as if the Domain attribute 
        ' were present And contained the current host name
        ' c.Domain = context.Request.Url.Host
        c.Expires = System.DateTime.UtcNow.AddMonths(-1)
        context.Response.Cookies.Set(c)
    Next key
    ' clear cookies server side
    context.Request.Cookies.Clear()
End Sub

参见是否有可能获得存储cookie的路径?和MDN Set-Cookie.

你可以试试这样

if (Request.Cookies["id"] != null)
{
    Response.Cookies["id"].Expires = DateTime.Now.AddDays(-1);   
}

或者类似的

Session.Abandon();

Abandon()只清除会话cookie,不清除您手动设置的cookie。如果你指定的cookie不存在,它将返回null。