Yii Framework会话登录后未保存


Yii Framework Session Not Saved After Login

我们在/rprotected/components/UserIdentity.php中有以下函数:

public function authenticate()
    {
            $username = $this->username;
            $password = $this->password;
            $user = Users::model()->find('username=? AND password=?', array($username, $password));
            if($user === NULL){
                    $this->errorCode=self::ERROR_UNKNOWN_IDENTITY;
            }else{
                    $this->username = $user->username;
                    sess('SESS_USER_INFO', $user->attributes);
                    //print_r(sess('SESS_USER_INFO'));
                    $this->errorCode=self::ERROR_NONE;
            }
            return !$this->errorCode;
    }

以下是/protected/models/Users.hp:中的一个片段

public function login()
{            
        if($this->_identity===null)
        {
                $username = $this->username;
                $password = md5($this->password);
                //echo "Username: ".$username."<br />Password:".$password;
                $this->_identity=new UserIdentity($username, $password);
                $this->_identity->authenticate();
        }
        if($this->_identity->errorCode===UserIdentity::ERROR_NONE)
        {
                $duration=$this->rememberMe ? 3600*24*30 : 60*20; // 30 days
                //print_r($this->_identity);
                Yii::app()->user->login($this->_identity,$duration);
                //echo "Login Successful";
                return true;
        }
        else{
                //echo "Error";
                $this->addError('password','Incorrect username or password.');
                return false;
        }

问题:登录后,单击"我的配置文件"链接会提示再次登录。因此,会话似乎没有存储/保存登录凭据并在整个登录寿命内携带它们。

应该如何修改身份验证功能,以便存储会话信息并结转登录凭据?

请检查php.ini 中的"session.cookie_lifetime"值

session.cookie_lifetime = 2592000

您可以通过这种方式将登录凭据存储在CWebUser类的变量中$this->setState(loogedInUser,$user)使用setState函数。

这些信息存储在cookie中,而不是会话中,您可以使用Yii::app()->user->loogedInUser在任何位置。