我想在现有网站上制作一个仪表板面板网站。使用Yii1的现有应用可以通过,例如www.example.com
访问。我想使用Yii2使用新的应用程序www.example.com/dashboard
。我已经完成了apache配置。
但缺少的是会话。通过Yii1应用程序登录的用户将无法在仪表板中识别。
如何使Yii1和Yii2使用相同的会话数据,即在Yii1中登录的用户将在Yii2中被识别,反之亦然?
更新
该体系结构是负载均衡器后面的标准多个Web服务器。 这两个应用程序可以托管在同一个服务器实例中(配置将在apache中)。或者它们可以不同(负载均衡器也会处理目录)。 但两者都将使用相同的memcache服务器进行会话存储。应用程序也将使用相同的数据库,尽管ActiveRecord实现显然将使用不同的代码。只要我能获得当前登录用户的用户ID,就应该没问题。
答案 0 :(得分:2)
可以在两个应用程序(Yii1和Yii2)之间共享会话。如果您在Yii1中使用CDbHttpSession
而在Yii2中使用yii\web\DbSession
,则如何执行此操作(我没有使用其他类型的会话存储进行测试,但它应该相同):
yii\web\DbSession
的Yii2配置中,您应将会话名称设置为PHPSESSID
,以便它可以匹配Yii1使用的名称。 ''
。您可以通过扩展CWebUser
并在public function init()
: public function init() {
$this->setStateKeyPrefix('');
parent::init();
}
这就是您在两个应用程序之间共享会话所需的全部内容。
答案 1 :(得分:0)
我不确定是否可能,我知道yii2有一个cookie的设置,其中存储了auth详细信息。你可以在yii1
中做同样的事情看看这里 https://github.com/yiisoft/yii2/blob/master/docs/guide/tutorial-shared-hosting.md#separate-sessions-and-cookies你想做对决,在他们之间分享cookie。
顺便说一下,如果2个应用程序位于不同的域中,我认为不可能。
我能想到的另一个解决方案是尝试将会话移动到类似memcached的内容,并为两个应用程序使用相同的密钥。
另请看这里:http://www.yiiframework.com/doc-2.0/guide-tutorial-yii-integration.html你可能会发现一些有趣的东西。我相信您可以同时在两个地方登录用户,这也可以解决您的问题。