090733136.png

在LoginForm中:

091519718.png

在UserIndentify中:

091944711.png

在登录的视图文件中:

092606636.png

记住用户登录状态:

180521356.png

180538877.png


1、在登陆方法中

if(isset($_POST['LoginForm']))
		{
			$model->attributes=$_POST['LoginForm'];
			// validate user input and redirect to the previous page if valid
			if($model->validate() && $model->login())
				$this->redirect(Yii::app()->user->returnUrl);
		}

其中的login是记录了用户对应的session和cookie信息,这些信息是从validate()方法中来的,login方法如下:

	public function login()
	{
		if($this->_identity===null)
		{
			$this->_identity=new UserIdentity($this->username,$this->password);
			$this->_identity->authenticate();
		}
		if($this->_identity->errorCode===UserIdentity::ERROR_NONE)
		{
			$duration=$this->rememberMe ? 3600*24*30 : 0; // 30 days
			Yii::app()->user->login($this->_identity,$duration);
			return true;
		}
		else
			return false;
	}

其中的$this->_identity就是获得的用户信息。默认只是将用户名写入了session,可以重写他的方法将其他的写入session,如下在UserIdentity.php中:

  private $_id;

    /*
     * 进行用户名和密码的验证
     */
    public function authenticate()
    {
        $username=strtolower($this->username);
        $user=User::model()->find('LOWER(username)=?',array($username));
        if($user===null)
            $this->errorCode=self::ERROR_USERNAME_INVALID;
        else if(!UserSalt::vertifySalt($this->username,$this->password))
            $this->errorCode=self::ERROR_PASSWORD_INVALID;
        else
        {
            $this->_id=$user->userid;
            $this->username=$user->username;
            $this->errorCode=self::ERROR_NONE;
        }
        return $this->errorCode==self::ERROR_NONE;
    }
    /*
     * 重写方法,用户获取用户的id,因为默认的是获取用户的名称
     */
    public function getId()
    {
        return $this->_id;
    }
    /*
     * 重写方法,将除了用户名和用户ID的其他内容写入session
     */
    public function getPersistentStates(){
        return array('zhouzhuang','yiduokeji');
    }

这样就可以将最后的zhouzhuang,yiduokeji也写入session中。

可以通过Yii::app()->user->id,Yii::app()->user->name来进行访问。