2013-07-24 17 views
2

我在Symfony2中构建一个应用程序来替换使用CakePHP 1.3构建的遗留应用程序。这是一个很大的应用程序,为了满足最终用户的需求,决定将新应用程序与遗留应用程序配合使用,并且在Symfony2中重新编写旧系统的功能时,用户将被无缝导向新应用程序。如何让Symfony2使用与CakePHP 1.3生成的会话相同的会话?

为了保持干扰降至最低,还决定了用户将只需要一次登录到旧的应用程序和依据,如果他们登录的新应用程序应该只给访问用户在或不在。所以新的应用程序依靠旧的应用程序来处理安全性。此外,旧的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'); 

我可以为了可能弯曲它Symfony的工作改变一些CakePHP中的代码,但我不能对代码做任何大规模的改动。之前编写CakePHP 1.3的程序员早已消失,并且没有任何文档。

那么,我如何才能让Symfony2使用CakePHP创建和使用的相同会话,并且还阻止CakePHP在用户点击新应用程序的链接时将其记录下来?

+0

可能重复://计算器。 com/questions/17791519/how-to-read-a-cookie-using-symfony-2) – AD7six

+0

这不是重复的,因为这是指会话。此外,当用户点击Symfony2应用程序中的链接时,CakePHP如何将用户登录出去还有一个额外的问题。 – mickburkejnr

+0

会话ID存储在cookie中。如果它不是重复的,你所要求的不同之处并不明显(参考已经覆盖的地面会有所帮助)。 – AD7six

回答

-3

很好,看来它在默认的PHP配置是不可能的(在这里我应该写我的意思是它的PHP版本,但不会做)

默认现在check here

我们session.use_cookies = 1session.use_only_cookies = 1通过默认这意味着我们使用基于cookie的会话。

此外,它impossile设置从域cookie子域:check here

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

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

看来你需要通过URL来改变PHP配置,方法或通过会话ID,我认为[如何使用Symfony的2读取Cookie的?(HTTP的丑陋和不安全

+1

通过网址传递会话ID? 'session.cookie_domain = .domain.com'(在两个应用程序中定义)都会使会话cookie对两者都可见,他们需要相同的配置才能工作。 – AD7six

+0

我可以确认@ AD7six,我已经创建了一个可以从子域访问的cookie。确实,您无法从单独的域访问cookie,但完全可以从子域访问cookie,如AD7six所示。 – mickburkejnr

+0

我错过了为domain和subdomain设置类似cookie的可能性,但它仍然需要更改php配置,所以,不知道为什么你如此情绪化,我的回答在逻辑上是正确的:) – Vadim