Кэширование переменных в переменной $ _SESSION? - PullRequest
9 голосов
/ 12 декабря 2008

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

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

Ответы [ 3 ]

11 голосов
/ 12 декабря 2008

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

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

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

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

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

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

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

4 голосов
/ 12 декабря 2008

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

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

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

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

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