Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.04.2014, 19:37
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

Как запретить пользователю делать несколько 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 уникальность
Ответить с цитированием
  #2 (permalink)  
Старый 28.04.2014, 19:49
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

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

Последний раз редактировалось Octane, 28.04.2014 в 19:52.
Ответить с цитированием
  #3 (permalink)  
Старый 28.04.2014, 20:49
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Хочешь запретить пользователю открывать несколько вкладок?
Ответить с цитированием
  #4 (permalink)  
Старый 28.04.2014, 20:54
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

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


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

В идеале 1 ip - 1 соединение!
Ответить с цитированием
  #5 (permalink)  
Старый 28.04.2014, 23:11
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

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

Последний раз редактировалось kobezzza, 28.04.2014 в 23:24.
Ответить с цитированием
  #6 (permalink)  
Старый 29.04.2014, 01:35
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

Сообщение от kobezzza
Через флеш ставишь уникальный ИД сессии для машинки (гугли JS либы для работы с flash-storage) и на сервере контролируешь, чтобы для одной сессии был только одно соединение.
а если поддержки flash нет, либо он немерено отключен?
Ответить с цитированием
  #7 (permalink)  
Старый 29.04.2014, 01:38
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

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

как узнать порт NAT?
Он наверняка поступает на сервер, именно его наличие позволяет в результате идентифицировать пользователя!
Ответить с цитированием
  #8 (permalink)  
Старый 29.04.2014, 04:59
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,490

http://habrahabr.ru/post/215071/
Не совсем то, но может помочь.)
__________________
29375, 35
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать несколько раскрывающихся списков с отдельными заголовками. Lavrov jQuery 2 27.06.2013 18:00
как узнать что несколько элементов не в фокусе? PiExeL Общие вопросы Javascript 7 26.04.2013 10:10
Как можно нажать сразу на несколько кнопок? Yan.Total Events/DOM/Window 2 21.03.2013 11:02
Как делать переменные имена свойств? khusamov Общие вопросы Javascript 2 04.08.2009 22:10
Как запретить уход из фрейма в top-окно? sturm Общие вопросы Javascript 6 20.04.2008 04:20