我正在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将用户注销?
答案 0 :(得分:-3)
默认情况下check here
我们默认session.use_cookies = 1
和session.use_only_cookies = 1
这意味着我们使用基于Cookie的会话。
另外,将Cookie从域设置为子域是非常重要的:check here
这意味着,您的应用程序不能拥有相同的cookie,因此会话。
如上所述@ AD7six可以为doamin和subdomain设置相同的cookie,但这仍然需要更改默认的php配置:session.cookie_domain = .domain.com
。
似乎你需要通过url更改php配置,接近或传递会话ID,我觉得这很丑陋和不安全