Как определить, вошел ли пользователь в symfony?

Мне нужно знать, как я могу получить, зарегистрирован ли конкретный пользователь в symfony в приложении, есть ли способ получить идентификатор сеанса для текущих зарегистрированных пользователей?

Я пробовал с таблицей, когда у меня есть поле с именем is_online, и я устанавливал его, когда пользователь входит в систему и выходит из приложения, поэтому у меня возникает проблема, когда пользователь закрывает браузер или когда сеанс заканчивается, поэтому поле is_online остается истинный. По этой причине мне нужен другой способ узнать, зарегистрирован ли пользователь в приложении.

Любой совет будет полезен.


person JERC    schedule 24.05.2012    source источник


Ответы (2)


Вы можете отправить запрос ajax от пользователей, и как только кто-то не отправит запрос, например, 1 мин, измените его статус на офлайн. Будет хорошей идеей хранить статусы в каком-то хранилище ключей-значений, например, в MemCache. Подробнее см. здесь.

person Ruben Nagoga    schedule 24.05.2012
comment
Спасибо, это будет решением, но по соображениям безопасности, если приложение неактивно более 15 минут, сеанс должен быть закрыт. - person JERC; 24.05.2012
comment
Например, при запросе ajax каждые 5 минут сеанс никогда не закрывается. - person JERC; 24.05.2012
comment
Я не могу понять, где вы собираетесь использовать сессию для хранения статусов или я что-то пропустил? - person Ruben Nagoga; 24.05.2012
comment
Я просто хочу узнать, вошел ли пользователь в систему, и сказать, что пользователь session_id() близок к безопасности через 15 минут бездействия, с запросом ajax каждые 5 минут, сессия никогда не закрывается, и это не может быть разрешено. - person JERC; 24.05.2012
comment
вы можете отправить ping ajax только в том случае, если вы обнаружили, что пользователь что-то сделал на странице (mouseevent или нажатие клавиши, для этого вы можете использовать плагин jquery), если пользователь оставляет браузер открытым, ничего не делая, ping не будет отправлен и сессия истечет. Я бы не рекомендовал хранить данные сеанса или статусы в memcache, потому что у вас нет гарантии сохранения статуса в памяти. - person javiertoledos; 24.05.2012

Создайте поле базы данных, например lastonlinetstamp, и метод ping в ajax, который каждую минуту вызывает службу с одним и тем же сеансом. Затем позвольте службе проверки связи обновить файл lastonlinetstamp. Если это значение старше 1 минуты, вы знаете, что пользователь не в сети. Но: это увеличит количество запросов к вашему серверу.

person Del Pedro    schedule 24.05.2012