3

我有以下情况:我已经登录用户,使用 DB 表进行标准身份验证

$authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter()); 
$authAdapter->setTableName('users'); 
$authAdapter->setIdentityColumn('user_name'); 
$authAdapter->setCredentialColumn('password'); 

当用户编辑他的个人资料时,我将其保存到 Db 中,但我还需要更新存储(使用标准 Zend_Auth_Storage_Session)。有什么简单的方法可以做到吗?非常感谢。

4

3 回答 3

8
$user = Zend_Auth::getInstance()->getIdentity();
$user->newValue = 'new value';

假设您正在更新数据库的同一语句中更新会话数据,则无需再次调用数据库。

于 2008-11-20T13:45:39.217 回答
5

您最好的选择是不使用 Zend_Auth 的存储来保存可能更改的信息——默认情况下它只保存身份(有充分的理由)。我可能会创建一个 User 类,它包含所有 Auth、ACL(可能还有配置文件)功能,该功能使用静态 get_current() 方法来加载隐藏在会话中的用户。这绕过了您在将其填充到会话中时遇到的所有一致性问题,并在您实际需要性能提升时为您提供一个实现缓存的点。

于 2008-11-20T18:30:30.313 回答
4

我已经这样做了,它可以工作,但我不知道是否有更好的方法,如何做到这一点

$user_data = User::getUser($user_id)->toArray();
unset($user_data['password']);

$std_user = new stdClass();

foreach ($user_data as $key => $value)
{
   $std_user->$key = $value;
}

$auth = Zend_Auth::getInstance();     
$auth->getStorage()->write($std_user);  
于 2008-11-20T11:50:45.267 回答