Session 如何让Symfony2使用CakePHP 1.3生成的相同会话?

Session 如何让Symfony2使用CakePHP 1.3生成的相同会话?,session,cakephp,symfony,cakephp-1.3,Session,Cakephp,Symfony,Cakephp 1.3,我正在Symfony2中构建一个应用程序,以替换用CakePHP 1.3构建的遗留应用程序。这是一个大型应用程序,为了满足最终用户的需求,决定新应用程序将与旧应用程序一起运行,当旧系统的功能在Symfony2中重写时,用户将无缝地定向到新应用程序 为了将中断降至最低,还决定用户只需登录一次旧应用程序,而新应用程序只应根据用户是否登录授予用户访问权限。因此,新应用程序依赖于旧应用程序来处理安全问题。此外,旧的CakePHP应用程序位于www.domain.org,而新的Symfony2应用程序位于

我正在Symfony2中构建一个应用程序,以替换用CakePHP 1.3构建的遗留应用程序。这是一个大型应用程序,为了满足最终用户的需求,决定新应用程序将与旧应用程序一起运行,当旧系统的功能在Symfony2中重写时,用户将无缝地定向到新应用程序

为了将中断降至最低,还决定用户只需登录一次旧应用程序,而新应用程序只应根据用户是否登录授予用户访问权限。因此,新应用程序依赖于旧应用程序来处理安全问题。此外,旧的CakePHP应用程序位于
www.domain.org
,而新的Symfony2应用程序位于子域
new.domain.org

我现在遇到的问题是如何在Symfony2中使用CakePHP创建的会话。我尝试了一些方法,比如将用户ID写入cookie,然后让Symfony2检查cookie是否已设置。这样做允许用户从旧系统导航到新系统,但一旦从新系统单击到旧系统的链接,旧系统就会引导用户退出,要求他们再次登录

在CakePHP 1.3代码中,每个区域的顶部都有以下代码:

$this->checkSession();
我从未构建过CakePHP1.3应用程序,也没有CakePHP1.3的工作知识(我对CakePHP2.0一无所知)。因此,通过深入研究,我在
core.php
文件中找到了会话的配置,如下所示:

Configure::write('Session.cookie', 'DOMAIN');

Configure::write('Session.timeout', '120');
Configure::write('Session.start', true);
Configure::write('Session.checkAgent', true);

Configure::write('Security.level', 'medium');
Configure::write('Security.salt', '***RANDOM STRING***');
Configure::write('Security.cipherSeed', '***RANDOM STRING***');
还有一些用于ACL的代码,但它似乎没有包含太多内容或做任何事情。这些是:

Configure::write('Acl.classname', 'DbAcl');
Configure::write('Acl.database', 'default');
我可以更改CakePHP中的一些代码,以便使其能够与Symfony一起工作,但我不能对代码进行任何全面的更改。构建CakePHP1.3的前一位程序员早就出现了,也没有留下任何文档


那么,如何让Symfony2使用CakePHP创建和使用的相同会话,并防止CakePHP在用户单击新应用程序的链接时注销用户?

好吧,在默认php配置中似乎是不可能的(这里我应该写下我指的是哪个版本的php,但不会这样做)

现在默认情况下

我们有
session.use_cookies=1
session.use_only_cookies=1
默认情况下,这意味着我们使用基于cookie的会话

此外,不可能将cookie从一个域设置到另一个子域:

这意味着,您的to应用程序不能有相同的cookie和so会话

正如@AD7six所提到的,可以为doamin和subdomain设置相同的cookie,但是仍然需要更改默认的php配置:
session.cookie\u domain=.domain.com


似乎您需要更改php配置、方法或通过url传递会话id,我认为这是丑陋和不安全的

嗯,在默认的php配置中似乎是不可能的(这里我应该写下我指的是哪个版本的php,但不会这么做)

现在默认情况下

我们有
session.use_cookies=1
session.use_only_cookies=1
默认情况下,这意味着我们使用基于cookie的会话

此外,不可能将cookie从一个域设置到另一个子域:

这意味着,您的to应用程序不能有相同的cookie和so会话

正如@AD7six所提到的,可以为doamin和subdomain设置相同的cookie,但是仍然需要更改默认的php配置:
session.cookie\u domain=.domain.com


似乎您需要更改php配置、方法或通过url传递会话id,我认为这是丑陋和不安全的

可能的重复,它不是重复的,因为这是指会话。此外,还有一个问题是,当用户单击Symfony2应用程序的链接时,CakePHP如何将用户注销。会话id存储在cookie中。如果它不是重复的,那么你所问问题的区别就不明显了(参考已经覆盖的领域会有帮助)。可能的重复不是重复的,因为这是指会话。此外,还有一个问题是,当用户单击Symfony2应用程序的链接时,CakePHP如何将用户注销。会话id存储在cookie中。如果它不是重复的,那么您所询问的内容之间的差异就不明显了(引用已经覆盖的内容会有所帮助)
session.cookie\u domain=.domain.com
(在两个应用程序中定义)将使会话cookie对双方可见,他们当然需要相同的配置才能工作。我可以确认@AD7six,我已经创建了一个可以从子域访问的cookie。诚然,您不能从单独的域访问cookie,但完全可以从子域访问cookie,如AD7six所示。我错过了为域和子域设置类似cookie的可能性,但它仍然需要更改php配置,因此,不确定您为何如此激动,我的答案在逻辑上正确:)是否通过url传递会话id
session.cookie\u domain=.domain.com
(在两个应用程序中定义)将使会话cookie对双方可见,他们当然需要相同的配置才能工作。我可以确认@AD7six,我已经创建了一个可以从子域访问的cookie。诚然,您不能从单独的域访问cookie,但完全可以从子域访问cookie,如AD7six所示。我错过了为域和子域设置类似cookie的可能性,但它仍然需要更改php配置,因此,不确定您为什么如此激动,我的回答在逻辑上是正确的:)