Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Как запретить пользователю делать несколько ws-соединений одновременно (https://javascript.ru/forum/offtopic/46898-kak-zapretit-polzovatelyu-delat-neskolko-ws-soedinenijj-odnovremenno.html)

dmitry111 28.04.2014 19:37

Как запретить пользователю делать несколько 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 уникальность

Octane 28.04.2014 19:49

Не проще закрывать старое подключение пользователя? Тогда и IP не придется проверять. Да и вообще, вдруг старое соединение повисло, а новое не создашь при такой логике.

monolithed 28.04.2014 20:49

Хочешь запретить пользователю открывать несколько вкладок?

dmitry111 28.04.2014 20:54

Цитата:

Сообщение от Octane
Не проще закрывать старое подключение пользователя? Тогда и IP не придется проверять. Да и вообще, вдруг старое соединение повисло, а новое не создашь при такой логике.

речь о другом. Мне хотелось бы запретить пользователю создавать более 1 подключения!


Цитата:

Сообщение от monolithed
Хочешь запретить пользователю открывать несколько вкладок?

не только вкладок. Хотелось бы блокировать соединение также в разных браузерах, ну и пк :)

В идеале 1 ip - 1 соединение!

kobezzza 28.04.2014 23:11

Через флеш ставишь уникальный ИД сессии для машинки (гугли JS либы для работы с flash-storage) и на сервере контролируешь, чтобы для одной сессии был только одно соединение.

dmitry111 29.04.2014 01:35

Цитата:

Сообщение от kobezzza
Через флеш ставишь уникальный ИД сессии для машинки (гугли JS либы для работы с flash-storage) и на сервере контролируешь, чтобы для одной сессии был только одно соединение.

а если поддержки flash нет, либо он немерено отключен?

dmitry111 29.04.2014 01:38

мне больше интересно:

как узнать порт NAT?
Он наверняка поступает на сервер, именно его наличие позволяет в результате идентифицировать пользователя!

Aetae 29.04.2014 04:59

http://habrahabr.ru/post/215071/
Не совсем то, но может помочь.)


Часовой пояс GMT +3, время: 08:44.