【发布时间】:2026-01-27 18:30:01
【问题描述】:
我使用 Zend_Auth 对用户进行身份验证,然后将他们的详细信息存储在默认的 Zend_Auth 会话中。这意味着当用户编辑他的详细信息时,这些更改不会反映在应用程序中,直到他重新进行身份验证。
我想这样避免这个问题:
- 当用户登录时,我们只将他的
user ID存储在Zend_Auth会话中 -
在每个请求中,我们使用
user ID在preDispatch()挂钩中从数据库中获取用户的详细信息,该user ID在登录时存储在Zend_Auth会话中:class Plugin_Auth extends Zend_Controller_Plugin_Abstract { public function preDispatch(Zend_Controller_Request_Abstract $request) { if ($auth->hasIdentity()) { $id = $auth->getIdentity()->id; $userModel = new Model_User(); $user = $userModel->fetchOne($id); // Where do I store this user object ??? } } } 问题是:我在哪里存储这个
User对象?我认为我们不应该为此使用会话,因为会话的目标是持久化数据。但是不需要持久性,因为我们在每次请求时都从数据库中重新获取数据。只有user ID必须是持久的。将User对象存储在Zend_Registry中是一种选择吗?
【问题讨论】:
-
将重新身份验证作为更改用户配置文件的一部分是否不合适。毕竟,您需要确保用户实际上是用户。这是重新验证和更新存储的好时机。