4

所以我有一个站点位于 URL“mysite.com”上,另一个站点位于“subdomain.mysite.com”上。用户帐户存储在“mysite.com”中,因此当我需要登录“subdomain.mysite.com”时,我会将用户带到“mysite.com”,他们输入他们的凭据以正常身份验证并确保身份验证通过在 cookie 中设置如下,cookie 可在“subdomain.mysite.com”中使用domain

HttpCookie cookie = FormsAuthentication.GetAuthCookie(username, true);
cookie.Domain = ".mysite.com";
Response.Cookies.Add(cookie);

然后我将它们重定向回“subdomain.mysite.com”,谢天谢地,用户在那里通过了身份验证。

除了注销时,一切正常。当用户尝试从任何站点注销时,我会按预期删除身份验证 cookie:

FormsAuthentication.SignOut();

但由于某种原因,cookie 没有被删除,用户保持登录状态。

我试过直接使用删除cookie,Request.Cookies[FormsAuthentication.FormsCookieName]但仍然没有。由于某种原因,Chrome 紧紧抓住 cookie:我可以在 Chrome 的开发人员工具中看到它。

我究竟做错了什么?帮助!

4

1 回答 1

7

好的,找到了问题的解决方案。

HttpCookie cookie = Request.Cookies[FormsAuthentication.FormsCookieName];
cookie.Domain = ".mysite.com";
cookie.Expires = DateTime.Now.AddMilliseconds(-1);
Response.Cookies.Add(cookie);

如您所见,这里发生了两件事:
- 我再次明确地为我正在处理的 cookie 设置域。显然,您必须告诉浏览器域上下文,否则它根本找不到 cookie。
- 而不是删除cookie,我只是让它过期。

于 2013-07-18T01:06:32.263 回答