Как решить, когда использовать базу данных свыше $_SESSION

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

Мое первое рассмотрение - производительность. Насколько я понимаю, по умолчанию хранение информации в $_SESSION означает, что сервер записывает файл на диск. Для небольшого LAMP-сервера или простого небольшого веб-сайта размер вашего $_SESSION переменную нужно получить до того, как база данных станет более эффективной опцией. Будет 10, 100, 1000, 10000 членов массива в $_SESSION быть там, где вы начинаете рассматривать использование базы данных вместо этого? Или трафик больше внимания?

Второе соображение - это безопасность. В некоторых других ответах я видел утверждения типа "никогда не храните ххх в $_SESSION переменная ". Делает ли хранение информации в базе данных фактически более безопасным, чем $_SESSION или может быть $_SESSION быть безопасным, как база данных, если сервер настроен правильно?

Я чувствую, что многие сайты, разработанные в дикой природе, начнут использовать $_SESSION для начала, и не обязательно подвергаться рефакторингу для использования базы данных. Если вы можете перенаправить $_SESSION переменная из файла в базу данных в любом случае, всегда лучше использовать $_SESSION и позже укажите, что в базе данных, если производительность является проблемой?

Есть ли другие соображения, чтобы сделать для этого выбора дизайна?

3 ответа

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

Поэтому основная причина хранить что-либо в базе данных, а не в сеансе, заключается в том, что вы хотите сохранить это.

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

Что касается безопасности, пока данные сеанса должным образом зашифрованы, они достаточно безопасны.

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

По умолчанию сессии PHP хранятся на диске.

Некоторые дистрибутивы поставляются с усиленным PHP под названием suosin http://www.hardened-php.net/suhosin/, и его можно настроить для шифрования сеансов.

Что касается эффективности сессий, я бы сказал очень. Вам, вероятно, никогда не придется беспокоиться об этом, и если вы когда-нибудь попадете в точку, где это станет проблемой, вы, вероятно, захотите сохранить сеансы в памяти вместо диска / базы данных.

Можно изменить способ хранения / загрузки сессий PHP, проверьте это: http://php.net/manual/en/session.customhandler.php

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

Что касается аспекта безопасности, не рекомендуется хранить пользовательские данные в сеансе (имя пользователя, хэш, электронная почта). Если вы хотите использовать только сеансы, вы можете зашифровать сеанс, который предлагают многие фреймворки, такие как CodeIgniter.

Итак, в заключение, по моему мнению, вы всегда должны использовать базу данных для пользовательской информации (включая IP-адрес) и сеансы для общих данных (условия поиска, аналитика и т. Д.)

Надеюсь, это поможет вам с вашим решением.

С уважением, Джеймс

Другие вопросы по тегам