在Yii2中自动登录多个域

时间:2015-03-31 21:13:16

标签: php session cookies yii2

我有一个拥有根域和多个子域的站点,每个子域都是一个单独的yii2模块。目前我必须单独登录每个子域。我希望能够登录到根目录,然后自动登录到每个子域。网上有几页关于实现这一点,但没有任何作用。

目前我在两个main.php配置文件中都有相同的设置(即根域和我正在测试的一个子域)

'components' => [
    'request' => [
        'enableCookieValidation' => true,
        'enableCsrfValidation' => true,
        'cookieValidationKey' => 'XXXXXXX',
    ],
    'user' => [
        'class' => 'yii\web\User',
        'identityClass' => 'common\models\User',
        'enableAutoLogin' => true,
        'identityCookie' => [
            'name' => '_myapp',
            'httpOnly' => true,
            'path' => '/',
        ]
    ],
    'session' => [
        'name' => 'MYAPPSESSID',
        'cookieParams' => [
            'path' => '/',
        ],
    ],

在使用安装程序登录后在Chrome中检查我的Cookie时,我看到两个Cookie,一个用于主网站,一个用于子域,它们都被称为MYAPPSESSID,并且都包含不同的密钥'这可能与PHP会话中设置的用户信息有关。我知道这两个cookie应该是一个cookie,以便两个域连接到会话用户对象 - 但我已经尝试了所有我能想到的不同设置,并且无法使其工作。

2 个答案:

答案 0 :(得分:8)

要能够登录所有子域,请使用以下配置:

'components' => [
    'session' => [
        // ...
        'cookieParams' => [
            'path' => '/',
            'domain' => ".domain.com",
        ],
    ],
    'user' => [
        // ...
        'identityCookie' => [
            'name' => '_identity',
            'path' => '/',
            'domain' => ".domain.com",
        ],
    ],
    'request' => [
        // ...
        'csrfCookie' => [
            'name' => '_csrf',
            'path' => '/',
            'domain' => ".domain.com",
        ],
    ],
],

答案 1 :(得分:2)

我最终想到了这一点。 session-> cookieParams需要一个'域'在main.php配置文件上设置,这是一个前缀为'。'的顶级域名。我确实试过这个,但是没有生成cookie,结果是因为我在Mamp Pro中设置的本地域没有以cookie预期的方式格式化。所以我的应用是 http://myapp http://subdomain.myapp 。事实证明,cookie域设置需要顶级域名(如.com)。所以我将主机更改为 http://myapp.local http://subdomain.myapp.local 。然后我将cookie域设置为 .myapp.local 并且它有效。

这是我的新配置,它位于根域和子域中。上面的用户 - > identityCookie设置证明是不必要的。

'components' => [
'request' => [
    'enableCookieValidation' => true,
    'enableCsrfValidation' => true,
    'cookieValidationKey' => 'XXXXXXX',
],
'user' => [
    'class' => 'yii\web\User',
    'identityClass' => 'common\models\User',
    'enableAutoLogin' => true
],
'session' => [
    'name' => 'MYAPPSESSID',
    'cookieParams' => [
        'path' => '/',
        'domain' => '.myapp.local'
    ],
],