Допустим можно отправлять по id сокету запрос и если приходит ответ, менять статус на онлайн.
В базе хранить такое вряд-ли стоит, как это реализовывали вы или как это было реализовано в проектах над которыми вы работали если такие есть?
хранить в бд время последнего успешного ответа. Если прошло, к примеру, больше 5 минут - считать что пользователь оффлайн и выдавать соответствующий статус(если вы его куда то выдаете)
Написано
historydev
@historydev Автор вопроса, куратор тега JavaScript
Я делал так.
1. Когда пользователь заходит на сайт происходит подключение к сокету с передачей id пользователя. Сервер обрабатывает подключение, находит пользователя в бд и сразу же пишет в бд online = true.
2. Как только происходит отключение от сокета, сервер знает id пользователя и id сокета. Сервер проверяет, подключен ли ещё сокет с таким id пользователя, если есть ничего не происходит, если нет, то через задержку в n минут ставит в бд online = false и last_time_online = текущее время.