登录后不保存Yii框架会话

时间:2012-07-31 22:36:20

标签: php yii session-state

我们在/rpotected/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.php的片段:

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;
        }

问题:登录后,单击“我的个人资料”链接会再次提示您登录。因此,似乎会话不存储/保存登录凭据并在登录生命周期中携带它们。

如何修改身份验证功能以便存储会话信息并使登录凭据继续进行?

2 个答案:

答案 0 :(得分:1)

请检查php.ini中的“session.cookie_lifetime”值

session.cookie_lifetime = 2592000

答案 1 :(得分:-2)

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

此信息存储在Cookie中,而不是会话中,您可以使用它来访问它 在任何地方 Yii :: app() - &gt; user-&gt; loogedInUser