在我的网站中,当用户点击“退出”按钮时,Logout.aspx页面会加载代码Session.Clear()
。
在ASP.NET / C#中,这是否清除了所有cookie?或者是否需要添加其他代码才能删除我网站的所有Cookie?
答案 0 :(得分:129)
尝试类似的东西:
if (Request.Cookies["userId"] != null)
{
Response.Cookies["userId"].Expires = DateTime.Now.AddDays(-1);
}
但使用
也是有意义的Session.Abandon();
除了在许多场景中。
答案 1 :(得分:42)
不,只能通过setting the Expiry date为每个Cookie清除Cookie。
if (Request.Cookies["UserSettings"] != null)
{
HttpCookie myCookie = new HttpCookie("UserSettings");
myCookie.Expires = DateTime.Now.AddDays(-1d);
Response.Cookies.Add(myCookie);
}
Session.Clear()
时刻:
Session
集合中的所有键值对。 Session_End
事件未发生。如果在注销期间使用此方法,则还应使用Session.Abandon
方法
Session_End
事件:
答案 2 :(得分:25)
这就是我使用的:
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 expiredCookie = new HttpCookie(cookie.Name) {
Expires = DateTime.Now.AddDays(-1),
Domain = cookie.Domain
};
HttpContext.Current.Response.Cookies.Add(expiredCookie); // overwrite it
}
}
// clear cookies server side
HttpContext.Current.Request.Cookies.Clear();
}
}
答案 3 :(得分:8)
不幸的是,对我来说,设置“Expires”并不总是有效。 cookie没有受到影响。
这段代码对我有用:
HttpContext.Current.Session.Abandon();
HttpContext.Current.Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
其中"ASP.NET_SessionId"
是cookie的名称。这并没有真正删除cookie,而是使用空白cookie覆盖它,这对我来说非常接近。
答案 4 :(得分:4)
我只想指出使用Session.Abandon时不会删除会话ID cookie。
当您放弃会话时,不会删除会话ID Cookie 用户的浏览器。因此,会议一旦开始 放弃,对同一应用程序的任何新请求都将使用相同的 会话ID但会有一个新的会话状态实例。在同一个 时间,如果用户在同一DNS中打开另一个应用程序 域,用户放弃后不会丢失会话状态 从一个应用程序调用方法。
有时,您可能不想重复使用会话ID。如果你这样做,如果 您了解不重用会话ID的后果,请使用 以下代码示例放弃会话并清除 会话ID cookie:
Session.Abandon(); Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
此代码示例清除服务器的会话状态并设置 会话状态cookie为null。 null值有效清除 来自浏览器的cookie。
答案 5 :(得分:2)
您绝不应将密码存储为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
}
答案 6 :(得分:2)
将OP的问题标题删除为所有Cookie - “删除网站中的Cookie”
我在网上找到了Dave Domagala的代码。我编辑了Dave's以允许谷歌分析cookie - 它通过网站上的所有cookie循环并删除它们。 (从开发人员的角度 - 将新代码更新到现有站点,可以避免用户重新访问该站点时出现问题。)
我首先使用以下代码,首先阅读cookie,保存所有必需的数据 - 然后在用以下循环清洗所有内容后重置cookie。
代码:
int limit = Request.Cookies.Count; //Get the number of cookies and
//use that as the limit.
HttpCookie aCookie; //Instantiate a cookie placeholder
string cookieName;
//Loop through the cookies
for(int i = 0; i < limit; i++)
{
cookieName = Request.Cookies[i].Name; //get the name of the current cookie
aCookie = new HttpCookie(cookieName); //create a new cookie with the same
// name as the one you're deleting
aCookie.Value = ""; //set a blank value to the cookie
aCookie.Expires = DateTime.Now.AddDays(-1); //Setting the expiration date
//in the past deletes the cookie
Response.Cookies.Add(aCookie); //Set the cookie to delete it.
}
添加:如果您使用Google Analytics
上述循环/删除将删除该网站的所有Cookie,因此如果您使用Google Analytics - 保留__utmz Cookie可能会很有用,因为这会跟踪访问者的来源,搜索引擎是什么使用过,点击了什么链接,使用了什么关键字,以及访问网站时它们在世界上的位置。
为了保持它,一旦知道了cookie名称,就包装一个简单的if语句:
...
aCookie = new HttpCookie(cookieName);
if (aCookie.Name != "__utmz")
{
aCookie.Value = ""; //set a blank value to the cookie
aCookie.Expires = DateTime.Now.AddDays(-1);
HttpContext.Current.Response.Cookies.Add(aCookie);
}
答案 7 :(得分:1)
虽然这是一个老线程,但我想如果有人在将来仍在寻找解决方案。
HttpCookie mycookie = new HttpCookie("aa");
mycookie.Expires = DateTime.Now.AddDays(-1d);
Response.Cookies.Add(mycookie1);
这就是我的诀窍。
答案 8 :(得分:1)
现在是2018年,因此在ASP.NET Core中,有一个直接内置的函数。要删除Cookie,请尝试以下代码:
if(Request.Cookies["aa"] != null)
{
Response.Cookies.Delete("aa");
}
return View();
答案 9 :(得分:0)
Response.Cookies [“ UserSettings”]。Expires = DateTime.Now.AddDays(-1)
答案 10 :(得分:0)
您必须设置过期日期才能删除Cookie
Request.Cookies[yourCookie]?.Expires.Equals(DateTime.Now.AddYears(-1));
如果cookie不存在,这不会引发异常。
答案 11 :(得分:0)
如果有人喜欢,我强烈更喜欢这个。
string COOKIE_NAME = "COOCKIE NAME"
if (HttpContext.Request.Cookies.AllKeys.Contains(COOKIE_NAME))
{
HttpCookie Cookie = HttpContext.Request.Cookies[COOKIE_NAME];
engagementIdCookie.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(Cookie);
}