Как запретить пользователю делать несколько ws-соединений одновременно
Нужно запретить пользователю делать несколько подключений по вебсокетам к ресурсу. Чтоб работало по принципу: один пользователь - одно соединение
Как это сделать? Сначала хотел создать объект с ip адресами и записывать в него id сокета. При авторизации проверять наличие ip и в случае обнаружения принудительно закрывать соединение. Что-то вроде: io.set('authorization', function (handshakeData, callback) { var address = handshakeData.address.address; // если в сессиях есть ip if (sessions[address]) { io.sockets.sockets[sessions[address]].disconnect(); callback(null, true); } else { callback(null, true); } }); io.sockets.on('connection', function (socket) { var address = socket.handshake.address.address; sessions[address] = socket.id; // добавляем сессию }); socket.on('disconnect', function () { var address = socket.handshake.address.address; delete sessions[address]; // удаляем сессию }); Но узнал, что это может создать проблемы у тех соединений где используется NAT Плохо понимаю NAT. Возможно ли как-то идентифицировать NAT. Там же вроде порт еще есть какой-то "особенный", что дает даже не уникальному id уникальность |
Не проще закрывать старое подключение пользователя? Тогда и IP не придется проверять. Да и вообще, вдруг старое соединение повисло, а новое не создашь при такой логике.
|
Хочешь запретить пользователю открывать несколько вкладок?
|
Цитата:
Цитата:
В идеале 1 ip - 1 соединение! |
Через флеш ставишь уникальный ИД сессии для машинки (гугли JS либы для работы с flash-storage) и на сервере контролируешь, чтобы для одной сессии был только одно соединение.
|
Цитата:
|
мне больше интересно:
как узнать порт NAT? Он наверняка поступает на сервер, именно его наличие позволяет в результате идентифицировать пользователя! |
http://habrahabr.ru/post/215071/
Не совсем то, но может помочь.) |
Часовой пояс GMT +3, время: 08:44. |