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

如何使两个应用程序Yii1和Yii2使用同一会话?,yii,yii2,Yii,Yii2,我想在我现有的网站上创建一个控制面板网站。现有应用正在使用Yii1,可以通过www.example.com访问。我想使用Yii2的新应用程序制作www.example.com/dashboard。我已经进行了apache配置 但缺少的是会议。仪表板中将无法识别通过Yii1应用程序登录的用户 如何使Yii1和Yii2使用相同的会话数据,即在Yii1登录的用户将在Yii2中被识别,反之亦然 更新 该体系结构是负载平衡器后面的标准多个web服务器。 这两个应用程序可以托管在同一个服务器实例中(配置将在

我想在我现有的网站上创建一个控制面板网站。现有应用正在使用Yii1,可以通过www.example.com访问。我想使用Yii2的新应用程序制作
www.example.com/dashboard
。我已经进行了apache配置

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

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

更新

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

我不确定这是否可行,我知道Yi2对存储身份验证详细信息的cookie有一个设置。在yii1中,您可能也可以做同样的事情

看看这里 如果你想做这个网站,就在他们之间共享cookie

顺便说一句,我不相信这是可能的,如果这两个应用程序是在不同的领域

我能想到的另一个解决方案是尝试将会话移动到类似memcached的位置,并对两个应用程序使用相同的密钥


再看看这里:你可能会发现一些有趣的东西。我相信您可以同时在两个位置登录用户,这也可能解决您的问题。

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

  • 在应用程序的
    yii\web\DbSession
    的Yii2配置中,您应该将会话名称设置为
    PHPSESSID
    ,以便与Yii1使用的会话名称匹配
  • 因为在Yii1 CWebUser中,使用前缀存储记录的用户id和用户状态中的其他内容,所以您应该将其设置为空字符串(或者您可以在两个应用程序之间共享的任何内容。Yii2不使用前缀,所以空字符串也可以使用)
    '
    。您可以通过扩展
    CWebUser
    并在
    公共函数init()中添加类似的内容来实现这一点:
public function init(){
$this->setStateKeyPrefix(“”);
父::init();
}


这就是在两个应用程序之间共享会话所需的全部内容。

这两个应用程序是否将托管在同一台服务器上?更新了说明。他们可以是,也可以不是。但他们将在同一领域。一个在
www.example.com
中,另一个在
www.example.com/dashboard
中。您解决了这个问题吗?我也有同样的问题。yii1和yii2共享相同的会话更新服务器配置。那么,我们如何配置这两个应用程序,使其在memcache服务器上使用相同的会话(或者cookie)id。如果两个应用程序共享同一个域,则完全可以使用CDbHttpSession/DbSession或类似memcache/redis的会话存储在它们之间共享会话。它在将大型应用程序从Yii1迁移到Yii2的过程中非常有用,因为在这种情况下,您可以一部分一部分地迁移。关于如何做的说明,请参见上面的答案。