Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Определить запуск второй копии страницы сайта, как?

Смирнов Знаток (426), закрыт 3 месяца назад
Добрый день, коллеги.
Назрел такой вопрос, есть одностраничный сайт, и необходимо допустить работу в одном аккаунте только параллельно с одной версией сайта, т. е. нельзя использовать ещё одну копию сайта во вкладке, или с другого устройства (скажем вошли под собой со стационарного компьютера, + забыли и вошли ещё со смартфона), необходимо понимать, что уже есть одна версия в использовании.
Посоветуйте, каким образом лучше реализовать? (без использования флеша)
Страничка на php+mysql, на клиенте JS, можно использовать html5, главное понимать, чтобы решение было кроссбраузерным (можно без поддержки совсем устаревших браузеров типа ie6-7
Лучший ответ
Татьяна Шеховцова Высший разум (419606) 7 лет назад
Запрет входа с другого устройства - то просто, запоминать устройство, на котором был выполнен вход, и до истечения сессии запрещать входить ещё раз откуда-либо (по ip номер не пройдёт, сильно много ip у одного человека может быть, только по юзерагенту)
Ольга ИвановаПросветленный (35723) 7 лет назад
так ему же еще и 2ю складку нельзя открывать - во че!
Татьяна Шеховцова Высший разум (419606) А то уже думать надо. А не хочется
СмирновЗнаток (426) 7 лет назад
Т. е. каждый n-секунд записывать в базу идентификатор устройства с которым сверняемся при открытии страницы?
Не совсем до конца понял
Татьяна Шеховцова Высший разум (419606) Зачем? Элементарный автовход на сайте ведь есть? Значит и сессия есть (через куки или ещё как там реализована). Вот привязать к этой сессии юзерагент, и при логине откуда-либо его проверять
Остальные ответы
Ольга Иванова Просветленный (35723) 7 лет назад
это что за ситуация такая, чтобы запретить открытие 2й вкладки?
СмирновЗнаток (426) 7 лет назад
Ну к примеру браузерная игра, необходимо запретить запуск второй копии в параллельном режиме. Чтобы 1 раз открыл сайт, вошел под своим аккаунтом, и чтобы параллельно не мог также войти в другой вкладке, или в другом браузере, или с другого устройства, чтобы мы понимали, что это параллельный запуск
Ольга Иванова Просветленный (35723) ммм точно...
Даниил Шевцов Мастер (1988) 7 лет назад
Я этим никогда не занимался, но могу предположить, что:
1) для запрета дублирования в нескольких вкладках в одном браузере можно и нужно использовать куки. Т. е. при открытии вкладки записывается кука. При повторном открытии этой же страницы в новой вкладке проверяется наличие этой куки. Если кука есть, то блокируем доступ на второй вкладке. Если же куки нет, то пропускаем пользователя и ставим куку. Это выполняется довольно просто на JavaScript'е.
2) для запрета дублирования на разных устройствах, в разных браузерах на одном устройстве и т. д. единственный выход — использовать сессии, т. е. отправлять на сервер данные о том, что выполнен вход в аккаунт — сервер ставит сессию или делает запись о том, что аккаунт активен. Целесообразно через определённые промежутки времени (например, раз в 10 минут) напоминать серверу о том, что клиент активен (вам в пример тот же ВКонтакте). При входе в аккаунт, если уже стоит флаг "онлайн", клиента должно "выбросить" из аккаунта.

Вот вам пример организации задуманного вами плана. Вообще, в большинстве случаев, проекты не требуют особой защиты. Поэтому рекомендую вам просто ставить сессии и разрешить дублирование в нескольких вкладках браузера. При изменении данных в аккаунте просто проверяется активен ли аккаунт или нет.
СмирновЗнаток (426) 7 лет назад
Даниил, спасибо за развернутый ответ.
Даниил Шевцов Мастер (1988) Не за что)
Сергей Жаков Мудрец (16208) 7 лет назад
без базы данных на сервере никак
СмирновЗнаток (426) 7 лет назад
Так без чего никак, без флеша или БД? :)
с БД проблем нет, флеш не факт что будет работать в разных мобильных браузерах.
Сергей Жаков Мудрец (16208) флеш просто дает более компактный фугнкционал он с тем же php скриптом работает и проверяет в все в базе данных как Реализуешь плюс используешь php сесисии проверяешь их
Pro Gamer Профи (647) 7 лет назад
Да, без базы данных никак
Фаимя Салихова Мыслитель (7216) 7 лет назад
Без Опроса никак (как в Моей Любимой Ферме (но там Флэш), через каждые 15 секунд Сервер Опрашивает Клиента, в случае отсутствия Ответа через 30 секунд (после нескольких повторных Запросов) Сессия завершается). Десятикратный перерасход Трафика (как результат). Новые Серверы Установить, с Поддержкой Шифрованного Соединения (TSL, SSL, HTTPS). Только не для отвода глаз, как во всей Зоне Ру, а настоящее SSL256bit. :)

Можно ещё Клиентское Приложение Написать (которое после Установки будет Следить за тем, что нужно, Общаясь с Серверной частью Приложения), которое Ставится в Клиентский компьютер и Работает с собственным однооконным Браузером. Но, это слишком уж заумно (потянет на Создание своего собственного Протокола, как в WhatsApp — потом фиг кто расшифрует). :)

В любом случае Сохраняются Последние Достижения. Если кто-то хлюздит, то может самому себе напартачить. Набрал в одном Окне одни (шикарные) Баллы (за скорость), а в другом совершенно в другую степь пошёл и получил другие (шикарные) Преимущества (но не Баллы, а какое-нибудь Уникальное Комбо-Достижение в Уровне). Обязательно будет что-то жаль терять. Настанет время выбора. Лжец сам же себя и накажет!!!

0:51 25.02.2017
Животное Мудрец (18897) 7 лет назад
Сервер всегда знает, кто вошёл и под каким аккаунтом. Дальше разрулить права - дело техники.
Похожие вопросы