2008-12-11 2 views
8

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

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

ответ

10

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

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

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

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

вещей не делать в куки

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

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

+0

Я где-то читал, что memcached не стоил этого для более низкого извлечения служебных данных. Это быстрее, чем использование сеанса? – menko 2008-12-11 23:34:21

4

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

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

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

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

Смежные вопросы