ASP.NET MVC How to be logout when same user is logged in from different computer

1k Views Asked by At

I did a lot of research but I couldn't find a clear solution. If logging in with the same user from a different computer, the old login must be logout.

My controller action code:

[HttpPost]
public ActionResult Index(User usr)
{
    var response = LoginManager.Login(usr);
    if (response != null)
    {
        Session.Add(Session.CurrentUser, response);
        return RedirectToAction("index", "Home");
    }
    return View();
}

LoginManager.Login code:

[HttpPost]
public static User Login(User usr)
{
    using (var db = new Entities())
    {
        var data = db.Users.FirstOrDefault(s => s.Email == usr.Email && s.Pass == 
        usr.Pass);
        if (data != null)
        {
             var ip = HttpContext.Current.Request.UserHostAddress;
             var addLog = new Log {UserID = data.Id, Date = DateTime.Now, IP = ip};
             db.Logs.Add(addLog)
             db.SaveChanges();

             return data;
        }
        return null;
    }
}

Session.CurrentUser code:

namespace ADMIN.Project
{
    public class Session
    {
        public const string CurrentUser = "CurrentUser";
    }
}
1

There are 1 best solutions below

0
Gökhan Özdemir On BEST ANSWER

Solution! it work fine.

Layout.cshtml Trigger

 var ip = HttpContext.Current.Request.UserHostAddress;
 var controlip= HomeManager.GetLogIP(loginuser.Id);
    if (controlip.IP != ip)
    {
        Session.Abandon();

        Response.Redirect("/Login/Index?msg=logged in from different computer");
    }

Manager GetLogIP

 public static Log GetLogIP(int id)
 {
   using (var db = new Entities())
   {
      var value = db.Logs.Where(x => x.UserID == id).ToList().Last();

      return value;
   }
 }

LoginController

 [HttpGet]
 public ActionResult Index(string msg)
 {
     ViewBag.Warning= msg;

     return View();
 }