Проверка на множественные авторизации под одним логином. Как?
Здравствуйте!
Есть самописный сайт с платным просмотром видео.
Как запретить несколько авторизаций с разных компов под одним логином?
Перелопатил интернеты, один из вариантов реализации следующий: при авторизации записываем тайм-штамп в БД и в переменную, на закрытой странице регулярно проверяем соответствие этих штампов и при различии разлогиниваем первого пользователя. Т.е. если под этим логином зайдет еще пользователь, то в БД тайм-штамп перепишется и первого пользователя выкинет.
Насколько я понимаю это создаст нагрузку на БД, но как я понял не критичную. Одновременно пользователей будет до 100.
Теперь вопросы.
Как сделать проверку тайм-штампов раз в минуту например? Покажите кусок кода, а то не могу понять куда копать дальше. Часть кода именно которая запускает запрос в БД регулярно и сравнение. Сам запрос и сравнение сделать могу.
Как разлогинить пользователя? Не просто разлогинить, а принудительно перекинуть на другую страницу или обновить текущую, т.к. даже если сделать логаут видео будет все равно проигрываться. Т.е. если тайм-штампы различаются, убиваем сессию и принудительно перегружаем страницу, а после перезагрузки и без сессии контент уже будет недоступен.
И вопрос по определению пользователя онлайн. Когда он двигает мышкой, переходит по ссылкам и т.д., тут все понятно, в js эти обработчики есть. А если он смотрит видео? Т.е. мышь не активна, клавиатура не активна. Активна только вкладка и открыт браузер (или браузер свернут вниз или открыта другая вкладка, но браузер не закрыт). Как определить, что пользователь все еще на сайте?
Устанавливваете сокет, если под этим логином логинятся, шлете по сокету команду в JS на разлогин.
А Алексей Дугнист на кол посадить, за "ajax запрос раз в минуту".
Вы абсолютно правы, но сокеты это "best practice" в хайлоад проектах, а для Евгения необходимо понять суть работы, чтобы потом по необходимости разобрать сокеты... Без знания процесса ajax запроса - сокеты рано учить... (это лишь имхо)
нда... это мне надолго
можно все таки пример "аякс запроса раз в минуту"? для запуска и теста пойдет, а к открытию разберусь с сокетами.
100 запросов к БД в минуту это большая нагрузка на сервер?
Евгений: такую защиту, как "аякс запрос раз в минуту" можно обойти. Greasemonkey (https://en.wikipedia.org/wiki/Greasemonkey) например умеет менять страницу до/после загрузки. Если сервис станет хоть немного популярен, то быстро напишут и распространят в интернет плагин. После загрузки страницы достаточно clearInterval(id), чтобы обойти защиту.
Вы никак не защититесь, если видео уже полностью загрузилось с сервера в браузер клиента. Даже с вебсокетами. Тут нужно идти от обратного, не пускать в аккаунт никого, пока под этим аккаунтом кто-то. Ну как в кабинку туалета. Но, это можно сделать нормально только с помощью вебсокетов/флеша. Но нужно заранее думать, как масштабироваться, ибо linux без хаков не позволит одному процессу открыть более 1 тыс. дескрипторов.
Если вы не знаете вебсокетов, то чтобы сделать более-менее нормально, потратите много времени. Я бы на вашем месте, не делал вообще ничего. Ну или если вам так печет, то можете не разрешать входить в аккаунт в течении N времени с другого ip, ну или что-то такое. Хотя, это очень кривое решение.
xfg: ну хорошо
а если реализовать пока защиту на уровне - один хитрец залогинился, открыл трансляцию, в соседней вкладке разлогинился и с его логином/паролем входит другой хитрец? Не учитывая, что есть Greasemonkey, хакеры выше уровня "знаю что такое F12" и т.д.
про Greasemonkey пока думать ранно... не настолько популярный сервис да и пользователи не того уровня. Сейчас нужно обкатать, посмотреть, проверить. А уже потом делать "начистовую".
Совсем без защиты оставлять как-то не комильфо... а то регистрация есть, права пользователей есть, а видеостраницу открыл и раздал по рукам. Что-то нужно сделать.
Евгений: тогда как ранее описали, а чтоб видео не загружали все сразу, отдавать только ближайшие пять минут, но сделать это непроще, чем освоить сокеты.