Это хороший и безопасный способ использования сессии для хранения конфигурации сайта? - PullRequest
0 голосов
/ 11 августа 2011

Я использую PHP и MySQL. На каждой странице мне нужны переменные конфигурации сайта, такие как site_url, site_path, contact_email, default_timezone ... и т. Д.

Вместо того, чтобы извлекать эти значения из базы данных при каждом обновлении страницы, я сохранял их в сеансе при первом посещении страницы.

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

Мне интересно, все ли в порядке. Это вызовет какие-то другие проблемы?

И сколько информации я могу хранить в сессии? Есть ли предел?

Ответы [ 3 ]

1 голос
/ 11 августа 2011

Некоторые из них звучат как глобальные ценности, общие для всех пользователей. Это плохой кандидат на значение сеанса. Было бы лучше хранить их где-нибудь в файле. Нет смысла хранить "site_url" для 50 000 сессий, если для каждого из них это значение одинаково. Пустая трата времени и пространства.

Хранение сеанса должно быть исключительно для пользовательских данных, то есть вещей, которые не могут / не могут быть разделены между несколькими пользователями.

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

0 голосов
/ 11 августа 2011

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

В этом случае сеанс не должен действовать как кеш. Проблема в том, что если у вас есть 10 тысяч сеансов, то данные сеанса должны дублироваться 10 тысяч раз. Это не эффективно.

Если размер вашего проекта оправдывает это, вам лучше использовать что-то вроде memcached (или кэш APC) для хранения кэшированных значений в течение определенного периода времени. Если вы используете класс базы данных для обработки конфигурации, попросите класс DB выбрать из кеша, чтобы все места, которые вызывают код, могли это делать, не беспокоясь о реализации. Вы можете попытаться использовать файлы в качестве механизма кэширования, но в этом случае вам придется беспокоиться об истечении времени ожидания кэша и доступа к файлам. Мера до принятия решения.

0 голосов
/ 11 августа 2011

Нет ограничений на то, сколько вы можете хранить в сеансе, но есть предел того, сколько памяти php может использовать http://ca.php.net/manual/en/ini.core.php#ini.memory-limit

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...