为已经验证的用户设置FormsAuthentication.SetAuthCookie(model.UserName,model.RememberMe)

时间:2014-01-23 23:07:56

标签: asp.net asp.net-mvc asp.net-mvc-4

我有以下登录操作方法: -

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可能仍然在同一浏览器中有效。那么有人可以提出建议吗? 感谢

1 个答案:

答案 0 :(得分:0)

好吧,Cookie不依赖于标签,因此当用户注销一个标签时,他/她也将从另一个标签中注销。

您可以为每个标签生成一个单独的Cookie,但这是一个相当不寻常的方案,您的代码并不代表这种情况。