【发布时间】:2011-12-09 18:11:16
【问题描述】:
标题应该说明一切。
这是设置 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,但是当我不设置域时,它会显示。
其次,当我实际使用自定义域创建 cookie 时,在下一个请求中,当我从请求中读取 cookie(对其进行解密)时,cookie 在那里,但域为空?
我还尝试创建另一个具有相同名称的 cookie 并将到期时间设置为昨天。没有骰子。
发生了什么事?有人可以帮忙吗?
【问题讨论】:
-
您是否可以在 web.config 中的
forms元素上指定domain属性?SignOut方法将使用它来设置正确的 cookie。 -
@vcsjones - 是的,我不能。因为我的应用程序提供单独的 TLD,例如 www.mysite.com 和 someothersite.foo.com。所以我需要从请求中动态提取域。我会暂时尝试一下,看看是否可以解决它。 (尽管这不是一个解决方案,但只是出于好奇)
-
不将 HTTP Only 用于身份验证令牌是极其危险的。
-
@Chris - 是的,我现在已经做到了 httponly。
标签: asp.net asp.net-mvc cookies dns forms-authentication