删除和删除我的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);
}
实际上,没有办法正确地做到这一点。
考虑以下代码:
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/
所以更正确的变体应该是:
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。