如何使两个应用程序Yii1和Yii2使用相同的会话?

时间:2015-01-30 02:44:10

标签: yii yii2

我想在现有网站上制作一个仪表板面板网站。使用Yii1的现有应用可以通过,例如www.example.com访问。我想使用Yii2使用新的应用程序www.example.com/dashboard。我已经完成了apache配置。

但缺少的是会话。通过Yii1应用程序登录的用户将无法在仪表板中识别。

如何使Yii1和Yii2使用相同的会话数据,即在Yii1中登录的用户将在Yii2中被识别,反之亦然?

更新

该体系结构是负载均衡器后面的标准多个Web服务器。 这两个应用程序可以托管在同一个服务器实例中(配置将在apache中)。或者它们可以不同(负载均衡器也会处理目录)。 但两者都将使用相同的memcache服务器进行会话存储。应用程序也将使用相同的数据库,尽管ActiveRecord实现显然将使用不同的代码。只要我能获得当前登录用户的用户ID,就应该没问题。

2 个答案:

答案 0 :(得分:2)

可以在两个应用程序(Yii1和Yii2)之间共享会话。如果您在Yii1中使用CDbHttpSession而在Yii2中使用yii\web\DbSession,则如何执行此操作(我没有使用其他类型的会话存储进行测试,但它应该相同):

  • 在您的应用程序的yii\web\DbSession的Yii2配置中,您应将会话名称设置为PHPSESSID,以便它可以匹配Yii1使用的名称。
  • 由于在Yii1中CWebUser使用前缀来存储已记录的用户ID和来自用户状态的其他内容,因此您应该将其设置为空字符串(或者您可以在两个应用程序之间共享的内容.Yii2不使用前缀,所以空字符串也很好用)''。您可以通过扩展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你可能会发现一些有趣的东西。我相信您可以同时在两个地方登录用户,这也可以解决您的问题。