我有以下登录操作方法: -
public ActionResult Login(LoginModel model, string returnUrl)
{
MembershipProvider domainProvider;
domainProvider = Membership.Providers["TestDomain1ADMembershipProvider"];
if (ModelState.IsValid)
{
if (domainProvider.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
return View(model);
}
return RedirectToLocal(returnUrl);
}
return View(model);
}
以下注销: -
public ActionResult LogOff2()
{FormsAuthentication.SignOut();
return RedirectToAction("Index", "Home"); }
我面临的问题是用户在同一浏览器中打开两个标签,指向登录页面。然后他从两个视图登录(我认为将创建两个身份验证cookie),然后如果他从一个选项卡注销(使一个cookie无效),另一个cookie仍然有效,用户可以在系统中导航。所以我在设置身份验证cookie之前检查用户是否已经过身份验证,如下所示: -
public ActionResult Login(LoginModel model, string returnUrl)
{
if (Request.IsAuthenticated) {
return RedirectToLocal(returnUrl);
}
MembershipProvider domainProvider;
domainProvider = Membership.Providers["TestDomain1ADMembershipProvider"];
if (ModelState.IsValid)
{
if (domainProvider.ValidateUser(model.UserName, model.Password))
{//code goes here..........
因为有两个cookie在同一个浏览器中嘲讽可能会有风险,因为用户可能会失去两次,如果他从一个标签中删除,他就会认为他已经从整个系统中扯掉了。而其他cookie可能仍然在同一浏览器中有效。那么有人可以提出建议吗? 感谢
答案 0 :(得分:0)
好吧,Cookie不依赖于标签,因此当用户注销一个标签时,他/她也将从另一个标签中注销。
您可以为每个标签生成一个单独的Cookie,但这是一个相当不寻常的方案,您的代码并不代表这种情况。