Yii2 Advanced - 在前端和mainsite之间共享会话(www的前端副本)

时间:2017-04-14 19:33:42

标签: session cookies yii2 yii2-advanced-app vhosts

我有一个自定义成员系统:Yii2 Members System。您可以参考它以获取完整的详细信息,或者安装它以便您可以使用它来解决此问题。

我有frontendbackend,就像Yii2提供的一样,只需进行一些修改即可分隔会话/ Cookie,以便backend与管理员模型一起使用并从{{1表。与旧的传统成员系统类似。

admin基本上是mainsite的克隆,它的角色是成为主要网站。您转到frontendwww.site.com后会得到什么。

以下是3个应用及其示例域:

  • mainsite = www.site.com或site.com
  • 前端 = users.site.com
  • 后端 = admin.site.com

当用户登录(site.com)并返回主页(users.site.com/site/login mainsite)时,我希望它知道他们已登录并显示其用户名。就像前端默认从高级应用程序操作一样。

从我到目前为止,我登录并返回主管,只读www.site.com。它看起来不像是Yii错误,而是服务器错误?当我在运行时查看Yii日志时,它提到了访问控制:

An internal server error occurred.

以下是我的一些配置。

mainsite /配置/ main.php

2017-04-14 13:38:25 [127.0.0.1][1][-][error][yii\web\HttpException:403] exception 'yii\web\ForbiddenHttpException' with message 'You are not allowed to perform this action.' in /Applications/XAMPP/xamppfiles/htdocs/yii2-members-system/vendor/yiisoft/yii2/filters/AccessControl.php:151

前端/配置/ main.php

'components' => [
    'assetManager' => [
        'bundles' => false,
    ],
    'request' => [
        'csrfParam' => '_csrf-mainsite',
    ],
    'user' => [
        'class' => 'common\components\User',
        'identityClass' => 'common\models\User',
        'enableAutoLogin' => true,
        'identityCookie' => [
            'name' => '_identity-frontend',
            'httpOnly' => true,
            'domain' => '.yii2-members-system.dev',
        ],
    ],
    'session' => [
        'name' => 'advanced-frontend',
        'cookieParams' => [
            'domain' => '.yii2-members-system.dev',
            'httpOnly' => true,
        ],
    ],
    'urlManager' => [
        'enablePrettyUrl' => true,
        'showScriptName' => false,
        'rules' => [
        ],
    ],
],

虚拟主机

'components' => [
    'assetManager' => [
        'bundles' => false,
    ],
    'request' => [
        'csrfParam' => '_csrf-frontend',
    ],
    'user' => [
        'class' => 'common\components\User',
        'identityClass' => 'common\models\User',
        'enableAutoLogin' => true,
        'identityCookie' => [
            'name' => '_identity-frontend',
            'httpOnly' => true,
            'domain' => '.yii2-members-system.dev',
        ],
    ],
    'session' => [
        'name' => 'advanced-frontend',
        'cookieParams' => [
            'domain' => '.yii2-members-system.dev',
            'httpOnly' => true,
        ],
    ],
    'urlManager' => [
        'enablePrettyUrl' => true,
        'showScriptName' => false,
        'rules' => [
        ],
    ],
],

1 个答案:

答案 0 :(得分:1)

您可以在子域或主域之间共享会话。根据yii配置,您需要在 frontend / config / main.php mainsite / config / main.php 中进行如下配置。

'request' => [
    'csrfParam' => '_csrf-app',
],
'user' => [
    'identityClass' => 'common\models\User',
    'enableAutoLogin' => true,
    'identityCookie' => ['name' => '_identity', 'httpOnly' => true, 'domain'=>'.yii2-members-system.dev', 'path'=>'/'],
],
'session' => [
    'name' => 'sessionName',
    'savePath'=> __DIR__ . '/../../sessionTmp'
],

在此配置中,会话名称,会话保存路径,身份cookie路径和域应与其他子域匹配,以在两个yii应用程序之间共享会话。

因此,在您的应用内创建一个tmp文件夹,并将其指向会话保存路径。像上面一样。

我希望,这会有所帮助。

相关问题