Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Работа с сетью > Идентификация пользователя по сокетам |
Автор: JoGi 25.2.2006, 03:04 | ||||
Добрый день, Я тут с такой проблемкой столкнулся... На стороне клиента имеется апплет, который коннектится к серверу. На сервере такой код:
То есть, имеется вектор активных клиентов. Допустим, адрес к серверу www.server.ru/enter.php. Тут клиент вводит логин, пароль и потом апплет конектится к серверу. Некоторые из проблем: * если подключившийся клиент нажмет ctrl+n, откроется копия окна. Выполнив на сервере код " for all clients send 'hello world' ", сообщение поступает в новое окно, причем в 2 эгземплярах. Сообщения сервер принимает из обоих окон. * или в етом-же окне браузера клиент впишет www.server.ru/enter.php и законектится заного, то сервер шлет сообщения и на новое имя и на старое(видно в дэбагере), которое уже по идее закрыто. В обоих случаях, проверяется подключен ли клиент - если при посылке сообщение возвращается false, то сокет клиента удаляется из clients. Но как показывает практика, почемуто возвращается true. Еслиже закрыть окно браузера и залогинится через новое окно, то при попытке послать данные в закрытое окно возвращается ошибка - как и должно быть. Почемуже пока окно браузера не закрыто, хоть в него и www.google.ru пиши, сервер всеравно шлет ему сообщения без ошибок. Получается он связывается с браузером а не с аплетом ![]() ВОПРОС: Можно-ли както сравнить сокеты? Хотелосьбы получить чтото такое
Или может быть есть какойто другой способ решить эту проблему? За ранее спасибо. |
Автор: COVD 25.2.2006, 18:06 | ||
Если апплет стартовал, то он продолжает работать, даже если вы в браузер загрузили другую страницу (www.google.ru ) Если из апплета открывается новый фрейм, то окно браузера можно даже закрыть. Апплет будет работать. Соединение с апплетом должно быть уникальным. Можно идентифицировать по логину, если они уникальные в системе. Тогда при открытии сокета апплет должен передать логин пользователя и если сервер обнаружит, что сокет для этого логина уже открыт, то отказать в соединении. Для этого надо уже открытые соединения хранить в hashtable с логином в качестве ключа. Однако если пользователь неудачно закроется и сервер это не обнаружит, то второй раз пользователь не сможет зайти в систему. |