Пару дней назад Петя Диденко у себя в твиттере задал вопрос, как решить достаточно распространенную задачу «Если оплачен один аккаунт, как не дать работать двум юзерам», ну и получил он огромную пачку ответов, среди которых был и мой самый простой вариант решения проблемы. Распишу сначала свое решение поподробнее, прежде чем двигаться дальше: в соглашении данной услуги пишем, что пользоваться услугой может только человек, на которого зарегистрирован аккаунт, если будут замечены случаи передачи аккаунта третьим лицам, то аккаунт будет заблокирован без возможности возврата денежных средств (особо юридические текста я писать не умею, но смысл должен быть понятен). То есть пункт в договоре есть, читать, правда, его все равно никто не будет, но мы предупредили. Дальше ведем список активных сессий и просто следим, что при попытке зайти под определенным аккаунтом, если активна другая сессия с этим же аккаунтов, то просто предыдущую сессию затирать, в результате чего человека с предыдущей сессией просто выкинет на страницу авторизации. Ну и соответственно все такие вещи стоит записывать в лог, из которого иногда выдирать те аккаунты, у которых часто происходит этот такой обрыв сессий – и их уже анализируем. Сессии пускай имеют timeout по 30 минут, если меняешь компьютер, с которого используешь этот аккаунт с домашнего на рабочий, скорее всего, столько времени и нужно, чтобы добраться до работы, и сессия просто оборвется, потому наше правило на этот случай не будет распространяться. Решение предельно простое, и никак не напрягает правомерных пользователей.
Давайте теперь рассмотрим другие варианты, которые были предложены Пете, и, со всем уважением к Пете, подумаем, почему им выбранный вариант не так уж и хорош.
Кстати, хочется заметить, что это опять разговор на тему Мнимая безопасность VS юзабилити, которую я недавно поднимал уже.