なぜここでセッションを照会しているのですか? もちろん、これにより、保存後に常に古いデータが再び取得されます。
いつものようにデータベースを使用し、データベースを再度更新してから、セッションを上書きしてください (cake 1.3 を使用しているようです):
public function profile() {
$uid = $this->Session->read('Auth.User.id');
if (!empty($this->data)) {
$this->data['User']['id'] = $uid;
if ($this->User->save($this->data, true, array('email', 'first_name', 'last_name', 'id', ...))) {
// if you rely on auth session data from the user, make sure to update that here
$this->Session->write('Auth.User.email', $this->data['User']['email']); // etc
...
// OK, redirect
} else {
// ERROR
}
} else {
$this->data = $this->User->find('first', ...);
}
}
ご覧のとおり、変更されたセッション キーを更新します。
2.x (現時点では指定していません) を使用している場合は、使用することもできます
$this->Auth->login($this->request->data['User']); // must be the User array directly
ただし、以前にセッションにあったすべてのデータを渡すように注意する必要があります。login() を使用する予定がある場合は、(最初に) 更新されたレコードをもう一度見つけてから、これを login() に渡すことをお勧めします。
しかし、個人的には、実際に変更されたフィールドのみを更新することを好みます。
自分のアカウント/プロファイルの編集を参照してください