Как решить, когда использовать базу данных свыше $_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-адрес) и сеансы для общих данных (условия поиска, аналитика и т. Д.)
Надеюсь, это поможет вам с вашим решением.
С уважением, Джеймс