1

我目前正在从事一个项目,我在其他人开始这个构建之后接管了这个项目。当我第一次开始该项目时,该项目是两个不同的子域 x.domain.com 和 y.domain.com,现在我们将其移动为一个域,但是两个站点 domain.com/x 和 domain.com/y。早些时候登录功能仅在 x 子域上可用,但现在我希望用户也能够在两个站点上登录。

每个站点都有主控制器(xController 和 yController),它们都扩展了 xyController。

如果我在 x 网站上登录一切正常,但只要我去 domian.com/y

yii:app()->user->isGuest returns true

如果我回到 domain.com/x 我登录了。

我无法弄清楚为什么会发生这种情况,两个站点的 PHPSESSID cookie 相同。

这是我扩展 CUserIdentity 的类:

class UserIdentity extends CUserIdentity{
private $_id;

public function authenticate(){
    $user=User::model()->findByAttributes(array('user_name'=>$this->username));
    if($user === null){
        $this->errorCode=self::ERROR_USERNAME_INVALID;
    }else{
        if($this->comparePassword($user, $this->password)){
            /** Do some other checks here **/
            $this->_id=$user->id;
            $this->errorCode=self::ERROR_NONE;
            return !$this->errorCode;
        }
        $this->errorCode=self::ERROR_USERNAME_INVALID;
    }
    return !$this->errorCode;
}

public function getId(){
    return $this->_id;
}
}

这是配置文件中的一部分

'components'=>array(
    'user'=>array(
        'class'=>'WebUser',
        // enable cookie-based authentication
        'allowAutoLogin'=>true,
    ),
    ...

[编辑] 我发现问题出在哪里,我必须在两个配置中将配置数组中的 id 选项设置为相同的值,之前没有在其中任何一个中设置 id

4

1 回答 1

0

在您的配置中启用基于 cookie 的身份验证:

'user' => array(
    'allowAutoLogin' => true,
),

比配置您的会话组件:

'session' => array(
    'savePath' => '/some/writeable/path',
    'cookieMode' => 'allow',
    'cookieParams' => array(
        'path' => '/',
        'domain' => '.yourdomain.com',
        'httpOnly' => true,
    ),
),

确保/some/writeable/path真的是可写的!

最后,这是 Yii 的关键点(上面的 cookie 配置是通用 PHP),Yii 应用程序 ID 必须在配置文件中设置:

'id' => 'yourdomain',

而已!

于 2013-10-20T12:11:13.353 回答