- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Тренды маркетинга в 2024 году: мобильные продажи, углубленная аналитика и ИИ
Экспертная оценка Адмитад
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Задача:
сделать так что бы один клиент одновременно мог обратиться только к одной копии скрипта script.php.
Имеется в виду такая ситуация:
человек открыл mysite.ru/script.php, скрипт находится в процессе выполнения, человек открывает еще одну вкладку в браузере и пытается запустить тот же скрипт, однако сервер выдает ему ошибку, мол нельзя одновременно запускать более 1 копии этого скрипта.
Как такое реализовать?
Проще и эффективней это сделать на фаерволе или с помощью mod_limitipconn.
Но если задачу нужно решить только с помощью скрипта, то при вызове скрипта открываем файл со списком ip текущих подключений, проверяем, нет ли в нём ip пользователя, если нет то заносим, если есть, то выдаём сообщение об ошибке. При завершении скрипта запись из списка удаляем.
В данном решении необходимо предусмотреть блокировку файла.
Если посетителей много, то можно использовать базу данных.
Как такое реализовать?
Для примера в PHP это можно реализовать через сессии.
1. Открываем сессию
2. Проверяем есть ли переменная user_connect=1 если нет создаем переменную user_connect=1
3. При втором подключении в сессии уже создана такая переменная, а значить юзер заходит повторно и его переадресовываем на нужно страницу (например с информацией об ограничениях)
Плюсы подхода:
1. Быстро реализовать практически в любой CMS
2. Стандартное решение не требующее модулей
3. Не зависит от вебсервера
Минусы подхода:
1. Работает только если разрешены кукисы (можно без них не пускать на сайт)
2. Требует доработки CMS
Для примера в PHP это можно реализовать через сессии.
1. Открываем сессию
2. Проверяем есть ли переменная user_connect=1 если нет создаем переменную user_connect=1
3. При втором подключении в сессии уже создана такая переменная, а значить юзер заходит повторно и его переадресовываем на нужно страницу (например с информацией об ограничениях)
Плюсы подхода:
1. Быстро реализовать практически в любой CMS
2. Стандартное решение не требующее модулей
3. Не зависит от вебсервера
Минусы подхода:
1. Работает только если разрешены кукисы (можно без них не пускать на сайт)
2. Требует доработки CMS
А что если юзер прервал выполнение скрипта? И то что должно было выполниться в конце скрипта, а именно сброс переменной user_connect, не будет выполнено, как тогда?
А что если юзер прервал выполнение скрипта? И то что должно было выполниться в конце скрипта, а именно сброс переменной user_connect, не будет выполнено, как тогда?
Согласен, предложенный вариант не лучший, еще можно сказать что открытие другого броузера, с другим набором кукисов (а значит и сессий) позволит запускать 2-ю копию.
В любом случае идентифицировать пользователя можно либо по IP, либо через метку в броузере.
Если брать за основу IP-фильтр то страдают пользователи за NAT, если кукисы - то пользователь может запустить еще один броузер.
В варианте с кукисами можно ограничить работу скрипта только в каком-то одном броузере через проверку user-agent.
Проблемы с обрывами и остановкой скрипта решаются временем жизни куки "до закрытия броузера"