Доброго дня(утра/вечера/ночи) всем!
Задался вопросом, каков алгоритм должен быть, что бы обеспечить отсутствие "двойного" входа на сайт под одним логином/паролем.
Т.е. человек регистрируется, входит на сайт. Теперь необходимо сделать так, что бы с другого компьютера/браузера нельзя было зайти на сайт под этим же логином.
Самое простое — сделать в базе поле logged, и ставить при входе true, а при выходе false. Но пользователи забывают жать кнопочку "Выход". Дальнейшее развитие этого пути — автоматом сбрасывать через N минут (N у меня 20, как время сессии) поле в false. Но проблема осталась — если закрыть браузер — войти повторно раньше чем через 20 минут не получиться.
Что придумать то? в идеале нужно что бы при входе на втором компе — первого "выкидывало".
О технических аспектах. Сейчас все работает так:
bool saveMe = false;
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(2, userName, DateTime.Now, DateTime.Now.AddMonths(1), saveMe, String.Empty);
HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
if (saveMe)
{
authCookie.Expires = DateTime.Now.AddMonths(1);
}
context.Response.Cookies.Remove(authCookie.Name);
context.Response.Cookies.Add(authCookie);
FormsAuthentication.SetAuthCookie(userName, false);
ну и
FormsAuthentication.SignOut();