2012-02-27 3 views
4

Я пытаюсь реализовать функцию на своем веб-сайте электронной коммерции, но я понятия не имею, как это сделать или с чего начать.автоматически отправляет сообщения с сервера на клиент без обратной передачи

Я хочу предупредить моих клиентов, которые уже подтверждены и вошли в мой сайт, и если кто-то еще с учетными данными пользователя (зарегистрированными пользователями) с целью взлома или любой другой угрозы безопасности, пытается снова войти в систему с помощью любого другим компьютером или браузером. Я могу предупредить уже зарегистрированного пользователя, чтобы как можно скорее изменить пароль для повышения безопасности, или если это тот же пользователь, который пытается войти в систему от нескольких клиентов, тогда он будет ограничен.

Я сохраню список уже зарегистрированных пользователей в моей базе данных и проверить, если пользователь уже вошел в систему. Но как я могу отправить оповещение динамически без пользователя поднимая любые постбэки со стороны клиента, потому что, как только поскольку другая попытка входа в систему сделана, мой скрипт должен немедленно предупредить уже зарегистрированного пользователя.

Надеюсь, я четко сформулировал свои требования. Если что-то расплывчато прокомментируйте, я проясню.

Я использую PHP 5.3 и MySQL 5.5. и сайт будет размещен на хостинге linux.

Я думаю, что AJAX поможет, но как. Я ищу решение в течение многих дней, но не повезло.

Пожалуйста, помогите.

+0

Да ajax - лучший способ, посмотрите объект XMLHttpRequest в API javascript – user544262772

+0

Вам нужно взглянуть на ответы и выбрать некоторые из них в качестве ответа. –

ответ

0

Вы ищете технику под названием Server Push.

TLDR: Сделать метод сервера, который будет принимать запрос, затем выполнить кадр до истечения определенного определенного времени или какого-либо события на стороне сервера. Возвращать различные ответы клиенту в зависимости от того, было ли это событие на стороне сервера или просто время ожидания. От клиента - вызов AJAX к этому методу с установленным длительным таймаутом и обработкой ответа.

Пожалуйста, проверьте my answer for similar question.

UPD: Кроме того, как предложил @AndreiG, вы можете реализовать аналогичную функциональность с непрерывным опросом. Это менее сложно, но менее чувствительно к событиям на стороне сервера.

+0

Нажатие на сервер, где вы сохраняете запрос открытым до тех пор, пока событие, связанное с нажатием на сервер, не будет подходящим вариантом. Как событие, на котором должно произойти нажатие на сервер, может произойти в этом случае никогда ... – Vishwanath

+0

@vishwanath: в моем ответе я задал «до определенного времени». –

0

Используя ajax, вы можете делать непрерывный опрос по URL-адресу, где вы можете показать, нужно ли увольнять предупреждение или нет. Вы можете делать это раз в несколько секунд или по вашему выбору.

0

Когда пользователь зарегистрировал идентификатор сеанса записи в пользовательской таблице. И проверьте каждые 5-10 секунд или значение, которое вы хотите, с помощью запроса ajax текущий идентификатор сеанса равен базе данных.

Если эти значения не совпадают, это означает, что кто-то вошел в систему с одинаковыми учетными данными пользователя.

2

Вы говорите о длительном опросе.

«Длинный опрос» это имя используется для описания метода, который:

  • запрос AJAX сделан (с использованием яваскрипта рамки, такие как JQuery) сервер ожидает запрошенных данных должны быть доступны, петли, и спит (ваш серверный PHP скрипт)
  • Этот цикл повторяется после того, как данные возвращаются клиенту и обрабатываются (как правило, в функции обратного вызова OnComplete ваш запрос Аякса)

Это существенно имитирует непрерывный поток в реальном времени от клиента к серверу. Я бы не стал делать это на PHP по многим причинам. Вот некоторые из них:

  • PHP сделан для быстрого выполнения (не для ожидания)
  • PHP заставит вас сделать какой-то опрос на стороне сервера и опираясь на сон()
  • РНР ешьте свою оперативную память, в то время как возникают процессы нереста для каждого запросов (Apache сделает это)
  • Не используйте сервер Apache для этой цели! Apache Server сможет лучше обрабатывать десятки тысяч коротких конечных соединений лучше, чем несколько сотен постоянных соединений. Независимо от того, в каком направлении вы идете (длинный опрос против ajax). Возможно, вам захочется подумать о создании более легкого веб-сервера, посвященного чату. что-то вроде Lighttpd или Nginx, которые могут иметь большее количество max_clients или большее количество одновременных запросов при одинаковых условиях памяти/ЦП.

Но вы можете сделать это, используя сон, опросив базу данных (или, лучше, кеш APC/Memcache).

Если вы хотите сделать что-то подобное, перейдите в некоторые технологии, которые могут иметь дело с событиями: Python (Tornado, gevent, eventlet, Twisted, ...), Ruby (Eventmachine, ...), Erlang, Scala, Server Side JavaScript (Node.js, ...), Comet ...

Вместо этого вы можете использовать простой способ

enter image description here

Взгляните на эту таблицу.

Вы можете сделать что-то подобное

  1. Создайте несколько дб таблицу с именем, напр. log и записать некоторые данные (например, ip, дату входа ...), когда пользователь заходит на ваш сайт. Оставьте поле signout_date пустым. (когда пользователь подписывается, просто обновите эту таблицу и разместите текущую дату). Если кто-то находится на вашем сайте, поле даты выписки должно быть пустым

  2. Затем в каждом действии пользователя проверьте свою таблицу на user_id: если есть больше, чем строки с одинаковыми user_id и поле с датой выписки. Затем просто сообщите пользователю, что еще один компьютер подписал ваши учетные данные.

0

В ASP называется технология Signalr. вы должны найти альтернативу этому в php, который, я думаю, Sockets.Maybe Ratchet или Wrench выполняет эту работу. Read Here