我有一个我添加到响应中的cookie,但如果已经存在具有相同密钥的cookie,我想删除它,否则我最终得到2个相同密钥的cookie。
我想通过简单地过期cookie将它从浏览器中删除?
HttpCookie cookie = new HttpCookie("UserCookie");
cookie.Value = encTicket;
if (HttpContext.Current.Request.Cookies["UserCookie"] != null)
ClearCookie("UserCookie");
HttpContext.Current.Response.Cookies.Add(cookie);
private static void ClearCookie(string key)
{
var httpContext = new HttpContextWrapper(HttpContext.Current);
var _response = httpContext.Response;
HttpCookie cookie = new HttpCookie(key)
{
Expires = DateTime.Now.AddMonths(-1),
Value = null
};
_response.Cookies.Add(cookie);
}
任何帮助都非常感激。
答案 0 :(得分:3)
“您不能直接删除用户计算机上的cookie。但是,您可以通过将cookie的过期日期设置为过去日期来指示用户的浏览器删除cookie。下次用户向页面发出请求时设置cookie的域或路径,浏览器将确定cookie已过期并将其删除。“
请阅读以下文章了解更多详情。
http://msdn.microsoft.com/en-us/library/ms178195(v=vs.85).aspx
答案 1 :(得分:1)
以下是我写我的cookie的方式。
protected string CookieSession(Enums.CookieSessionTypes sessionTypes, string cookieValue = "")
{
string sessionId = string.Empty;
var cookie = new HttpCookie(CookieName);
switch (sessionTypes)
{
case Enums.CookieSessionTypes.Add:
cookie.Values[SessionIdConst] = cookieValue;
cookie.Expires = DateTime.Now.AddDays(1);
Response.Cookies.Add(cookie);
sessionId = cookieValue;
break;
case Enums.CookieSessionTypes.Delete:
cookie.Values[SessionIdConst] = cookieValue;
cookie.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(cookie);
break;
}
return sessionId;
}
试一试,应该工作
答案 2 :(得分:0)
现在我只是选择集合中的最后一个cookie值,虽然我意识到这是一个巨大的黑客攻击。任何更好的建议都非常受欢迎。
string value = "";
for (int i = 0; i < HttpContext.Current.Request.Cookies.Count; i++)
{
if (HttpContext.Current.Request.Cookies[i].Name == "UserCookie")
value = HttpContext.Current.Request.Cookies[i].Value;
}
答案 3 :(得分:0)
我的Cookie未正确到期,因为它的路径设置与实际路径不同,与网址的域名部分不同, Cookie路径区分大小写。解决此问题的唯一方法是在Web服务器或代码中设置机制,以从任何其他URL大小写重定向到区分大小写的规范URL。然后你的cookie将重新开始工作。