Идентифицировать пользователя на сайте по запущенной программе (не факт, что на том же компьютере)?
Задумался вот над такой загадкой. А возможно ли идентифицировать пользователя на сайте (заметьте, не аутентифицировать, а просто узнать кто это) ничего у него не спрашивая? Использовать можно Javascript AJAX, PHP, установленные программы на сервере и на компьютере клиента.
Т.е. есть, скажем, 10 человек. У них запущены клиенты, подключенные к серверу. Они заходят на сайт и кликают кнопку и клиент показывает надпись «You clicked!» только тому пользователю, который действительно только что кликнул эту кнопку.
Поначалу, я думал заставить пользователя вводить e-mail. Но ведь кто-то может ввести чужой e-mail и таким образом сообщение увидит не тот. Затем пришла в голову мысль сравнить IP клиента, подключенного к серверу и IP пользователя, зашедшего на сайт. Но возникает вопрос: а будут ли гарантированно эти адреса совпадать? Ответ нет, т.к. на сайт можно прийти под прокси, а клиент может не использовать прокси (или вообще быть запущенным на телефоне — такое тоже допускается, но допустимо затребовать указывать это при регистрации).
Так вот такая загадка хабросообществу: возможно ли вообще максимально простым пользователю способом (т.е. не обязывая его помнить пароль) узнать какой из запущенных клиентов принадлежит ему и вывести туда сообщение, без ложного вывода у других пользователей системы?
Ваша программа пусть запускает свой вебсервер (очень лёгкий), который слушает порт, скажем 19999. После нажатия на кнопку джаваскрипт пусть туда шлёт запрос через AJAX/IFRAME.
Похожим образом, как я понимаю, клиент от WebMoney работает.
Если клиент откроет сокет на этот адрес, этого будет достаточно? Я не очень понимаю, как устроены вебсервера.
Отличное решение для ПК, но не очень для телефона. Хотя, можно проверять доступен ли адрес (как на яваскрипте это делать) и выбирать сообтветствующий способ.
1. достаточно думаю слушать TCP сокет и на все запросы ответить валидным HTTP ответом типа «HTTP/1.0 200 OK\n\n» после чего закрыть соединение. Возможно ещё чего-то придётся сделать…
2. для того чтоб говорить о телефоне необходимо больше знать о предметной части, т.к. телефон телефону рознь, но я с трудом преставляю что там можно открыть какие-то сокеты… а во многих телефонах многозадачность весьма своеобразная.
Зачем все это? Появилась у меня идея для стартапа — теперь вот прикидываю, а реализуема ли она вообще. Что за стартап — ждите на хабре через пару недель статью.
для телефона как я понимаю толко один вариант писать полностью свое приложение.
для компа легко делать с использованием легкого веб-сервера, который будет слушать какой нибудь порт, и скрипт на вашем сайте с этого порта получал чтобы данные и отправлял на сервер
Ну я думаю, что логичнее будет так. Клиент слушает сокет localhost:. JS проверяет — если сокет доступен, то получает с него некий уникальный серийник, если нет (например, клиент запущен в телефоне), то выводит поле, с предложением ввести этот серийник и ставит куку, чтобы на всех сайтах впредь использовать этот серийник (как вариант, галочку «запомнить код» поставить — вдруг он из интернет-кафе зашел). Я еще подумаю, каким должен быть этот серийник, чтобы быть достаточно простым, не иметь коллизий и чтобы его было трудно подобрать (см. вариант с эмейлов в исходном вопросе)
Ну кагбе с большой долей вероятности можно использовать флэш-куки. Устанавливать «клиентом» при коннекте, а в браузере читать через специабельные флешку и jsку.\
*не уверен в своем мозге, ибо болею гриппом и встал только таблеточку выпить. А тут интернеты опять…
По поводу флеш-кукисов можете почитать третью ссылку вот здесь: tinyurl.com/499krfg
Для мобильников имхо можно воспользоваться допущением, что на большинстве платформ можно вызвать объект браузера в контексте приложения (например pulse reader под андроидом так может) и открыть там специальный урл с личным ключем клиента, при переходе на который клиенту будут установлены нужные куки.
Да привязывайте по IP, вероятность того что ip совпадет у двух одновременно подключенных пользователей не велика, конечно если это сервис с посредственным количеством посетителей.
Та же можно брать хеш от IP + разрешение монитора(этот параметр легко получить как через javaScript так и софтом который установлен на машине пользователя)
Еще можно сделать что б программа при установке ставила на все браузеры нужный кукис с уникальным идентификатором.
Думается в это время (2.30 по Украине) уже плохо:), но первый, пришедший в голову вариант — плагин для браузера(который к примеру забирает идентификатор сессии из клиента и отдает его сайту). Работать это конечно будет только при условии, что клиент и браузер открыты в одной среде.
Сам с неньки :) Браузеров много, и писать под каждый плагин не вариант (на опере например, расширения не позволяют взаимодействовать с установленными программами).
должно работать в популярных браузерах: Firefox, Opera, Chrome, Safari, IE — т.е. без плагинов (их ведь ставить еще эти плагины надо, а пользователь существо ленивое) и без встраивания браузера в клиент.
Клиент — это постоянно запущенная программка, ожидающая, пока ее пользователь ткнет на кнопку на сайте. Запущен может быть как с телефона, так и с компьютера (но не одновременно (либо одновременно с указанием приоритета))
Серверная часть это тандем из серверного приложения, PHP и mySQL.
Ну и кнопка на сайте может быть чем угодно реализована, что способно послать запрос на PHP.
Вся эта связка может пересылать любую информацию в любом напрвлении (в рамках технологий конечно).
Ну тогда без ввода какой-либо идентифицирующей информации это не реализуемо. Будь то логин с паролем, уникальный ключ, генерируемый клиентом при старте и т.д. и т.п.
Ну вообще без ввода может и не обойтись. Можно ввести какую-нибудь информацию и сохранить ее в куке. Вот только какую, чтобы пользователь не напрягался.
Для телефона нереализуемо без двух одновременных сессий. С вводом пароля как в браузере, так и в клиенте.
Для компа реализовать можно двумя способами:
-сниффить трафик, соответственно получать сессию.
-прописывать в hosts при запуске 127.0.0.1 needed.host, а клиент заставить транслировать все запросы и ответы.
У обоих способов куча проблем и недостатков. Использовать такие решения можно только если вы абсолютно уверены, что хотите ходить на костылях.
Если же нет, то только так же, как в телефоне — вводы паролей и там, и там.
Если пользователей планируется чуть больше, чем немного, можно посмотреть сюда: panopticlick.eff.org/
Вполне возможно что такой информации окажется более чем достаточно.