我正在 Symfony2 中构建一个应用程序来替换使用 CakePHP 1.3 构建的遗留应用程序。这是一个大型应用程序,为了满足最终用户的需求,决定新应用程序将与遗留应用程序一起运行,并且当旧系统的功能在 Symfony2 中重写时,用户将被无缝引导到新应用程序.
为了将干扰降至最低,还决定用户只需登录一次旧应用程序,新应用程序只应根据用户是否登录来授予访问权限。因此,新应用程序依赖于旧应用程序来处理安全性。此外,旧的 CakePHP 应用程序位于 上www.domain.org
,而新的 Symfony2 应用程序位于子域上new.domain.org
。
我现在遇到的问题是如何在 Symfony2 中使用 CakePHP 创建的会话。我尝试了一些事情,比如将用户 ID 写入 cookie,然后让 Symfony2 检查 cookie 是否已设置。这样做允许用户从旧系统导航到新系统,但是一旦从新系统单击到旧系统的链接,旧系统就会引导用户退出并要求他们再次登录。
在 CakePHP 1.3 代码中,每个区域的顶部都有以下代码:
$this->checkSession();
我从未构建过 CakePHP 1.3 应用程序,而且我对 CakePHP 1.3 的工作知识一无所知(我对 CakePHP 2.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 一起使用,但我无法对代码进行任何大规模更改。之前构建 CakePHP 1.3 的程序员早已不复存在,也没有留下任何文档。
那么,我怎样才能让 Symfony2 使用 CakePHP 创建和使用的相同会话,并防止 CakePHP 在用户单击新应用程序的链接时将其注销?