Как получить доступ к сессии определенного пользователя?
Доброго времени суток, есть задача определить, находится ли пользователь на сайте или нет
При входе на сайт у пользователя создается сессия
Собственно и стоит задача: получить доступ к этой сессии через пользователя, но я не очень понимаю, как это можно сделать
В качестве альтернативы, наверное, можно всякий раз при входе на сайт и выходе с него менять у пользователя значение is_active на True или False, но я подозреваю, что это не лучшая идея
Django работает по протоколу HTTP, а это протокол без состояния. Без WebSocket'ов или поллинга со стороны фронта вы никак не сможете достоверно определить находится ли пользователь на сайте.
Сергей Горностаев, спасибо, не до конца понимаю такой момент:
Если юзер авторизуется, он должен становится онлайн, то есть логично new Websocket() открыть на странице авторизации при успешном входе
Но если пользователь оставил страницу открытой, ушел спать допустим, то есть бездействует, нам ведь его нужно сделать оффлайн, например после 5 минут отсутствия активности
Но в этом случае придется каждые 5 минут посылать запросы, то есть веб-сокеты не помогут
Я прав?
Andrei1penguin1, если нужно отслеживать активность, то можно через websocket слать события мыши и клавиатуры. Либо использовать ajax для отправки фоновых запросов через определённые промежутки времени при наличии активности.
Сергей Горностаев, а может отслеживать активность пользователя и если все в порядке, сессию держать открытой, а как только пользователь уйдет с сайта или перестанет проявлять активность-закрыть ее
И ключ сессии помещать в поле модели пользователя
Andrei1penguin1, сессия - это просто записи в базе с общим ключом, они никак не помогут отслеживать присутсвие на сайте. Время жизни куки с ключом - две недели, а записи вообще никогда не удаляются.
Andrei1penguin1 можно попробовать сделать что-то вроде этого, в модели пользователя создать поле "время последнего посещения", создать метод online там проверять это поле, если оно больше чем текущее время минус 5 минут, то пользователь онлайн. Это поле можно обновлять так, через middleware при каждом запросе обновлять это поле, а также разместить в html скрипт который будет с интервалов в 1 минусе слать на сервер запрос на какую-нибудь минимальную страницу, таким образом обновляя поле последнего посещения сайта