FormsAuthentication.SignOut不使用自定义域Cookie

时间:2011-10-18 02:59:16

标签: asp.net asp.net-mvc cookies dns forms-authentication

标题应该说明一切。

以下是设置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并将到期时间设置为昨天。没有骰子。

发生了什么事?有人可以帮忙吗?

2 个答案:

答案 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,只是将我写的静态类重置为默认值。

再次,希望这会有所帮助。

相关问题