Лучшая практика сеанса Zend: использовать пространство имен Zend Auth для других данных?

#php #zend-framework #authentication

#php #zend-framework #аутентификация

Вопрос:

Я пытаюсь выработать наилучшую конфигурацию для моих пространств имен сеанса Zend.

У меня есть две категории данных, которые мне нужно отслеживать в сеансе пользователя. Первое — это конфиденциальные данные, относящиеся к пользователю. Когда пользователь выходит из системы, информация должна быть удалена из сеанса.

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

Я использую Zend_Auth, и поэтому в сеансе есть пространство имен Auth. Я думаю, что мне следует сохранить другие данные, связанные с пользователем, в этом сеансе. (Я предполагаю, что Zend_Auth::getInstance()->clearIdentity() уничтожит все пространство имен).

Кроме того, я думаю, мне нужно второе пространство имен для хранения информации, связанной с UA, которое не будет уничтожено при выходе из системы.

Звучит ли это разумно? Я был бы рад услышать от всех, у кого есть опыт использования пространства имен Auth для хранения дополнительной информации.

Спасибо!

Комментарии:

1. «Когда пользователь выходит из системы, информация должна быть удалена из сеанса». — есть ли причина для этого?

2. Привет, zerkms, мне нужно удалить их идентификатор пользователя, адрес электронной почты и т.д. Из сеанса, поскольку они больше не являются «авторизованным пользователем».

3. @Kim: просто создайте новый сеанс, не заботьтесь о старом. GC будет.

4. @zerkms, не уверен, что ты имеешь в виду. Если у вас есть второе пространство имен в сеансе (то есть то, которое не связано с Auth), то при выполнении clearIdentity() второе пространство имен не уничтожается. Вы хотите сказать, что я должен вручную уничтожить сеанс?

5. @Kim: если пользователь вышел из системы, вы просто создаете новый сеанс. Ничего больше. Не заботьтесь о данных, потерянных в старой сессии — они будут очищены GC.

Ответ №1:

После экспериментов с этим я обнаружил, что было безопаснее оставить сессионное пространство имен Zend Auth в покое. Вместо этого я настроил альтернативное пространство имен в сеансе для всех данных, которые должны быть удалены при выходе из системы, и я использую namespaceUnset, чтобы отключить его.

Ответ №2:

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