我的登录方法中包含以下代码:
Response.Cookies["cookie"].Value = "...";
Response.Cookies["cookie"].Domain = "domain.com";
这样,cookie就会被放入主域和所有子域
然而,当我尝试删除cookie时:
Response.Cookies["cookie"].Expires = DateTime.Now.AddYears(-1);
它不起作用!
当我删除指定了Domain属性的2行代码时,它可以正常工作。
我该如何解决这个问题?
由于
答案 0 :(得分:28)
好的,我想出来了。
当你删除一个设置了Domain属性的cookie时,你需要为新的假cookie设置相同的属性:
if (Request.Cookies["cookie"] != null)
{
HttpCookie myCookie = new HttpCookie("cookie");
myCookie.Expires = DateTime.Now.AddDays(-1d);
myCookie.Domain = "domain.com"; // !!!!
Response.Cookies.Add(myCookie);
}
答案 1 :(得分:4)
我怀疑您在Expires
位于子域名时设置Response
...
Crosscheck:您可以尝试从域本身设置它,看看它是否有效吗?
根据http://msdn.microsoft.com/en-us/library/ms178195%28v=VS.100%29.aspx,您可以通过以下方式删除Cookie:
if (Request.Cookies["cookie"] != null)
{
HttpCookie myCookie = new HttpCookie("cookie");
myCookie.Expires = DateTime.Now.AddDays(-1d);
Response.Cookies.Add(myCookie);
}
答案 2 :(得分:0)
搜索了很多,无法让它工作。 我必须实际设置value属性才能使它工作!使用mvc 3 .net 4。
var current = HttpContext.Current.Request.Cookies[key];
if (current == null) return;
var myCookie = new HttpCookie(key)
{
Expires = DateTime.Now.AddYears(-1),
Value = current.Value,
Domain = domain
};
HttpContext.Current.Response.Cookies.Set(myCookie);
答案 3 :(得分:0)
需要使用空字符串设置域和值。没有价值就行不通。
var cookie = new HttpCookie(cookieName, string.Empty)
{
Expires = DateTime.Now.AddYears(-1),
Domain = {YourDomain}
};
Response.Cookies.Add(cookie);