Как запретить пользователю делать несколько 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, время: 02:38. |