Intereting Posts
$ _POST с переменным количеством входов? Подключение к удаленной DB2 на i5 / os через php-клиент на Windows-машине с использованием pdo_ibm или ibm_db2 php-расширений Как прочитать список файлов из папки с помощью PHP? Открытое уведомление Openfire через PHP Yii gridview использует внешнюю переменную в значении Лучшие практики для Post-Redirect-Get (PRG) с MVC в PHP Получать сообщения с помощью мета значения, используя флажок Ошибки / предупреждения PHP DOMDocument на html5-тегах Можно ли проверить, существует ли установленный ключ Redis, и если он не существует, установите его, если он существует, а затем выйдите, все как транзакция Как заставить браузер кэшировать изображения с помощью php? Регулярное выражение для шаблонов слишком сильно захватывает PHP-массив для таблицы HTML Laravel – как передать параметр маршруту? Есть ли более эффективная практика? Возврат нескольких строк с помощью MySqli и массивов Неопределенная ошибка индекса с использованием $ _SERVER

Кэширование переменных в переменной $ _SESSION?

Я делаю php веб-приложение, которое хранит пользовательскую информацию, которая не используется совместно с другими пользователями.

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

Это будет подходящим использованием механизма сессии, если вы помните следующее:

  • Сессия не сохраняется в течение неопределенного периода времени.
  • Когда вы выходите из сеанса, убедитесь, что вы действительно получили результат (ASP.NET вернет NULL, если сеанс истек / очищен)
  • Перезапуск сервера может стереть кеш сеанса.
  • Сделайте это для удобства, а не производительности. Для высокопроизводительного кэширования выберите соответствующий механизм (т.е. memcached )

Хорошая схема использования будет такой (эфирные файлы cookie или сеанс):

  • Пользователь регистрируется в
  • Сохраняйте предпочтения (цвет фона, последние 10 записей, категории) в сеансе / cookie.
  • При рендеринге страницы см. Значения Session / Cookie (чтобы они были действительными значениями, а не null).

Что не нужно делать в cookie

  • Не храните ничего чувствительного (используйте сеанс).
  • Значение cookie не должно предоставлять / запрещать доступ к чему-либо (используйте сеанс).
  • Ошибки ловушки, предполагать, что флаги и строки могут быть не такими, какие вы ожидаете, могут отсутствовать, могут быть изменены при переходе.

Я уверен, что есть и другие вещи, которые нужно учитывать, но это совсем не в моей голове.

Это может хорошо работать для относительно небольших объемов данных, но вам нужно будет принять во внимание некоторые вещи:

  1. $ _SESSION хранится где-то между запросами, файлом на диске или в базе данных или чем-то другим в зависимости от того, что вы хотите использовать (по умолчанию для файла)
  2. $ _SESSION является локальным для одного пользователя на одной машине.
  3. сеансы имеют TTL (время для жизни), они исчезают через определенное количество времени (которое вы контролируете)
  4. При определенных обстоятельствах сеансы могут блокироваться (редко это проблема, но я столкнулся с ней потоковой флеш-памятью). Если для данных, к которым вы хотите использовать кэш, вы должны получить доступ несколькими пользователями, вам будет гораздо проще кэшировать его отдельно.

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

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