我有一个 MVC 3 项目,它通过表单身份验证对用户进行身份验证。
为了在身份验证后需要时访问用户的不同信息,我实现了一个简单的类:
public class ComplexUserData
{
public static string complexAccountName;
public static string complexRole;
...
...
}
在每个页面请求上,控制器都会查看此对象并在需要时将数据填充到属性中。
另一方面:
登录过程如下:
- 请求登录页面
- 在返回 LogOn View 之前,控制器检查是否
HttpContext.User.Identity.Name
不为空 - 如果不为空,则使用该用户名查找用户并重定向到正确的登录页面
- 否则返回登录页面
注销过程如下:
FormsAuthentication.SignOut();
会话.Abandon();
HttpCookie cookie1 = new HttpCookie(FormsAuthentication.FormsCookieName, "");
cookie1.Expires = DateTime.Now.AddYears(-1); Response.Cookies.Add(cookie1);
HttpCookie cookie2 = new HttpCookie("ASP.NET_SessionId", "");
cookie2.Expires = DateTime.Now.AddYears(-1);
Response.Cookies.Add(cookie2);
重定向到登录
在我的母版页中,我SessionData.complexAccountName
在顶部栏中使用。在用户测试之前,一切似乎都很好。
用户 A 说,在他让页面闲置一段时间然后从系统注销后,站点返回到主页,并在顶部栏显示用户 B。与此同时,用户 B 做了同样的事情,在顶栏上看到了用户 A。
所以我假设当用户注销并重定向到登录页面时,正如流程所示,控制器会检查HttpContext.User.Identity.Name
and 虽然它应该为空,但它不是!实际上它拥有另一个用户的名字!
我做错了什么,为什么系统表现得很奇怪。
提前致谢并致以最诚挚的问候。