首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Yii2高级-前端和主站点之间的共享会话(用于www的前端共享会话的副本)

Yii2高级-前端和主站点之间的共享会话(用于www的前端共享会话的副本)
EN

Stack Overflow用户
提问于 2017-04-14 19:33:41
回答 1查看 1.9K关注 0票数 1

我已经创建了一个定制的成员系统:Yii2成员系统。您可以参考它获得完整的详细信息,或者安装它,这样您就可以使用它来解决这个问题。

我有frontendbackend,就像Yii2提供的那样,通过一些修改将会话/cookie分离开来,这样backend就可以与Admin模型一起工作,并从admin表中提取出来。类似于旧的传统成员制度。

mainsite基本上是frontend的一个克隆,它的作用是成为主要网站。当你去www.site.comsite.com时,你得到了什么。

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

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

当用户登录(users.site.com/site/login)并返回主页(mainsite at www.site.com)时,我希望它知道他们已经登录并显示了他们的用户名。就像前端在高级应用程序中默认的运行方式一样。

根据我到目前为止的情况,我登录并返回到主站点,它只读取An internal server error occurred.。它看起来不像Yii错误,而是服务器错误?当我在运行时查看Yii日志时,它提到了访问控制:

代码语言:javascript
复制
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

这是我的一些吐露。

mainsite/config/main.php

代码语言:javascript
复制
'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' => [
        ],
    ],
],

frontend/config/main.php

代码语言:javascript
复制
'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' => [
        ],
    ],
],

vhost

代码语言:javascript
复制
<VirtualHost *:80>
    ServerName yii2-members-system.dev
    ServerAlias yii2-members-system.dev
    DocumentRoot "/Applications/XAMPP/xamppfiles/htdocs/yii2-members-system/mainsite/web"
    ErrorLog "logs/mainsite.yii2-members-system.dev-error_log"
    CustomLog "logs/mainsite.yii2-members-system.dev-access_log" common
</VirtualHost>

<VirtualHost *:80>
    ServerName yii2-members-system.dev
    ServerAlias admin.yii2-members-system.dev
    DocumentRoot "/Applications/XAMPP/xamppfiles/htdocs/yii2-members-system/backend/web"
    ErrorLog "logs/admin.yii2-members-system.dev-error_log"
    CustomLog "logs/admin.yii2-members-system.dev-access_log" common
</VirtualHost>

<VirtualHost *:80>
    ServerName yii2-members-system.dev
    ServerAlias users.yii2-members-system.dev
    DocumentRoot "/Applications/XAMPP/xamppfiles/htdocs/yii2-members-system/frontend/web"
    ErrorLog "logs/users.yii2-members-system.dev-error_log"
    CustomLog "logs/users.yii2-members-system.dev-access_log" common
</VirtualHost>
EN

回答 1

Stack Overflow用户

发布于 2017-04-17 05:41:23

您可以在子域或主域之间共享会话。按照yii配置,您需要在frontend/config/main.phpmainsite/config/main.php.中配置如下所示

代码语言:javascript
复制
'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路径和域应该与其他子域匹配,以便在两个应用程序之间共享会话。

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

希望这能帮上忙。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43418088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档