NeoCode
@NeoCode
C/C++ programmer

Целесообразно ли хранить сессии в базе данных?

Изучаю php, в частности аутентификацию/авторизацию пользователей, и задумался вот над каким вопросом. Обещпринятым способом авторизации вроде как являются сессии. По умолчанию сессии хранятся в файлах на диске. В разных источниках в интернете разные мнения по поводу того, хорошо это или плохо... кто-то считает что это стандартное решение и потому хорошо; кто-то указывает на потенциальные проблемы с безопасностью и быстродействием. Еще упоминается многосерверная орнганизация, что-то с блокировками файлов (с этим я еще не разобрался) и т.д.
Но меня интересует следующее. Хочется отображать список пользователей онлайн и вообще иметь доступ к тому, какие пользователи сейчас онлайн и когда последний раз обращались к сайту. Очевидно, что для этого можно просто заносить в таблицу пользователей время последнего обращения... (кстати, это можно хранить как в mysql базе, так и в каком-то быстром хранилище типа ключ-значение). Это можно увязать с сессиями, а можно и не увязывать. Задачи очень близкие, поэтому вопрос: а как бы сделали вы и почему?
  • Вопрос задан
  • 606 просмотров
Пригласить эксперта
Ответы на вопрос 3
@IceJOKER
Web/Android developer
Сессии и список онлайн пользователей так-то не связаны, чтобы показать список онлайн пользователей нужно обновлять последнее обращение к серверу, а потом можно вывести онлайн за последние 15 минут(в вк вроде так).

А сессии - они хранятся на сервере и к ним доступа нет извне, а если получат к нему доступ, то полагаю получат еще и доступ к базе данных, так что вопрос безопасности тут одинаковый )
Ответ написан
Комментировать
@spotifi
От нагрузки зависит. От твоих возможностей зависит (можешь ли сервер настроить под себя как надо).
Я бы хранил сессии в Tarantool. Это такая In-Memory СУБД, которая сбрасывает на диск.
Создана в Mail.RU прежде всего именно для хранения сессий.
Ответ написан
Комментировать
потенциальные проблемы с безопасностью и быстродействием

Крохоборство, и куда опаснее как правило то, что пишется программистами.

а как бы сделали вы и почему?

Хранил бы ID сессий в базе. Вы именно это и подразумеваете под "хранением сессий в бд"?

Если да, то это целесообразно, если этого требует функционал сайта. Незалогиненных пользователей вполне можно идентифицировать по сессии, и хранить, таким образом, на основе сессии список товаров в корзине, либо, в вашем случае, последнее обращение к серверу.

В случае с залогиненными пользователями хранить в бд сессии большого смысла не вижу.

Если нет, то это бессмысленно в 99% случаев по причинам, отмеченным выше.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы