我有同樣的問題,並花了很多時間挖掘出來。
問題是您不要序列化User對象的序列化函數中的用戶名。
很多人使用他們的序列化功能如下:
public function serialize()
{
return serialize($this->id);
}
public function unserialize($data)
{
$this->id= unserialize($data);
}
這樣加載從會話令牌用戶時,只有ID是已知的(注意,這也打破了_switch_user = _exit功能?)。
爲了解決這個問題,你應該使用下面的代碼:
public function serialize()
{
return serialize(array($this->id,$this->username));
}
public function unserialize($data)
{
list($this->id,$this->username) = unserialize($data);
}
通過這種方式,用戶名和ID可用,這個問題是固定的。
注意:您的自定義用戶提供程序的'refreshUser'函數將永遠不會被使用,因爲它將被EntityUserProvider推翻!