标题应该说明一切。
以下是设置cookie的代码:
// snip - some other code to create custom ticket
var httpCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encodedTicket);
httpCookie.Domain = "mysite.com";
httpContextBase.Response.Cookies.Add(httpCookie);
以下是我退出网站的代码:
FormsAuthentication.SignOut();
环境:
ASP.NET MVC 3 Web应用程序
IIS Express
Visual Studio 2010
- 自定义域名:“http://localhost.www.mysite.com”
因此,当我尝试注销时,cookie仍然存在。如果我摆脱httpCookie.Domain
行(例如默认为null),它可以正常工作。
我注意到的另一个奇怪的事情是,当我设置域名时,Chrome不会在开发者工具的参考资料部分显示我的cookie,但是当我不设置域名时,它会。“ / p>
其次,当我实际使用自定义域创建cookie时,在我从请求中读取cookie时的下一个请求(解密它),cookie就在那里,但域是null?
我还尝试创建另一个具有相同名称的cookie并将到期时间设置为昨天。没有骰子。
发生了什么事?有人可以帮忙吗?
答案 0 :(得分:4)
我相信如果你在web.config中的forms
元素上设置domain
属性,与自定义cookie中的属性相同,它应该可以正常工作。 (编辑:这种方法不起作用,因为FormsAuthentication上的SignOut方法在cookie上设置了其他标志,而不是HttpOnly
} SignOut
方法基本上只设置cookie的到期日期到1999年,它需要域来设置正确的cookie。
如果您无法对域进行硬编码,则可以使用自己的注销方法:
private static void SignOut()
{
var myCookie = new HttpCookie(FormsAuthentication.FormsCookieName);
myCookie.Domain = "mysite.com";
myCookie.Expires = DateTime.Now.AddDays(-1d);
HttpContext.Current.Response.Cookies.Add(myCookie);
}
身份验证cookie只是一个简单的cookie;所以你可以像删除任何其他cookie一样删除它:expire it and make it invalid。
答案 1 :(得分:0)
我有类似的问题。在我的例子中,我在AuthCookie中存储了一些userData并且经历了与上述相同的效果,并且在每次请求时进行身份验证,读取cookie并将userData放在静态变量中。在我的情况下,结果是数据被保留在应用程序中。为了解决这个问题,我必须首先清除我的静态变量,然后使cookie过期。我在AccountController的LogOff方法中使用了以下内容:
AuthCookie.Clear(); //STATIC CLASS holding my userdata implemented by me.
Response.Cookies[FormsAuthentication.FormsCookieName].Expires = DateTime.Now.AddYears(-1);
Response.Cookies[FormsAuthentication.FormsCookieName].Value = null;
return RedirectToAction("Index", "Home");
希望这有帮助。
更新
提交后的预感,我用中间的两行代替:
FormsAuthentication.SignOut();
......它在以前没有的地方工作得很好。
注意:
AuthCookie.Clear();
...没有触及AuthCookie,只是将我写的静态类重置为默认值。
再次,希望这会有所帮助。