1) вам не нужно в бд перезаписывать данные, вам достаточно поля lastConnection, а онлайн или не онлайн определяйте на основе данного поля, т.е. если lastConnection - now() < 60 sec значит человек онлайн.
2) Не совсем понял что вам нужно и для чего вам что то хранит в localStorage? Если вам реально нужно знать что у кого-то открыто несколько вкладок то при открытии сайта гененируруйте какой ни будь uuid и шлите его на сервер, в этом случае схема БД немного усложняется, так как вам нужно будет в отдельной таблице хранить связку user | uuid | lastConnection . Таким образом сделав запрос select user, uuid from table where lastConnection - now() < 60 sec (запрос не рабочий просто для примера) вы получите все активные вкладки для конкретного пользователя
Большое спасибо за пояснения, т.е. я правильно понимаю что вопрос только в том что ассиметричное шифрование более "прожорливое", а не в том что оно менее безопасное?
Строки на самом деле не удаляются, они просто не отображаются. Это стандартное поведение при поиске, отображается только те данные с которыми есть совпадение. Не до конца ясно чего вы хотите добиться. Опишите более подробно вашу задачу
Все делается очень просто, но никто код за вас писать не будет. Судя с вашего вопроса вы совсем не понимаете что от вас хотят, поэтому я бы вам порекомендовал для начал изучить NodeJs, прочесть какую ни будь книгу, после прочтения, я уверен, вы сможете решить поставленную задачу.
Не до конца понятно из вашего вопроса, что вы ходите сделать и в чем заключается проблема.
1) Насколько я понял есть бекенд на Go и фронт на js, верно?
2) Как писали выше должен быть один источник правды и это БД, кто пишет данные в БД? Бекнед на Go, верно?
3) Если все так как я написал в 1 и 2 пункте то в таком случае напрашивается следующее решение: когда бекенд на Go записывает данные в БД после успешной записи уведомляет каким то образом фронтенд на js
Каким именно образом уведомлять, тут есть варианты, это может быть long polling, websocket или на крайний случай push уведомления в браузер. Лично для себя я бы выбрал websocket
Я в приведенном коде не увидел чтоб проверка капчи была на сервере. Когда капча заполнена то генерируется специальный токен, этот токен нужно отослать на сервер вместе с другой информацией и потом на сервере нужно сходить в сервисы рекапчи и проверить этот токен.
То, что вы добавили рекапчу на клиенте абсолютно не дает вам никакой защиты. Посмотрите комментарий выше там есть отличные примеры
По сути это нормальное поведение. Вам необходимо углубится немного в то как работает TCP/IP. Дело в том что у сетевого стека нет никакой возможности обнаружить что у вас пропал wifi, единственное что можно сделать это что-то отправить в сеть и если назад через некоторое время не пришло в ответ ничего - то значит связь, скорее всего оборвана. В своем сервисе я это решаю тем, что периодически шлю запрос на сервер по websocket, при получении такого сообщения сервер шлет ответ. Если в ответ на клиент в течении 30 секунд не приходит - значит связи нет.
В случае с эплом скорее всего потому что система уведомляет safari о том что статус wifi изменился. Скорее всего если вы выдерните шнур из роутера вместо отключения wifi на устройстве, то в safari будет такая же ситуация как и в других браузерах.
Вызов колбек функции onclose произойдет только если websocket будет закрыт "нормальным" способом, например сервер или клиент явно скажет о закрытии или закрытие вкладки в браузере
Скорее всего эти пользователи пользуются какими ни будь no-name браузерами, в которых криво реализован переход по ссылкам. И еще вопрос Вы пользуетесь какой то библиотекой для реализации входа через соц-сети или все далаи вручную с помощью vk, fb sdk?
2) Не совсем понял что вам нужно и для чего вам что то хранит в localStorage? Если вам реально нужно знать что у кого-то открыто несколько вкладок то при открытии сайта гененируруйте какой ни будь uuid и шлите его на сервер, в этом случае схема БД немного усложняется, так как вам нужно будет в отдельной таблице хранить связку user | uuid | lastConnection . Таким образом сделав запрос select user, uuid from table where lastConnection - now() < 60 sec (запрос не рабочий просто для примера) вы получите все активные вкладки для конкретного пользователя