2

我正在 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 在用户单击新应用程序的链接时将其注销?

4

1 回答 1

-3

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

默认情况下现在检查这里

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

此外,将 cookie 从域设置到子域是不可能的:检查这里

这意味着,您的应用程序不能有相同的 cookie 等会话。

正如@AD7six 提到的,可以为域和子域设置相同的 cookie,但这仍然需要更改默认的 php 配置:session.cookie_domain = .domain.com

似乎您需要更改 php 配置、方法或通过 url 传递会话 ID,我认为这很难看且不安全

于 2013-07-24T16:19:04.550 回答