2013-07-24 49 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