我正在爲我工作的公司使用的Web應用程序構建替代品。它是使用CakePHP 1.3構建的,我使用Symfony 2從頭開始重寫它。這兩個系統將並排運行,各種功能將傳輸到Symfony 2並從舊的CakePHP應用程序中移除。如何使用Symfony 2讀取Cookie?
爲了避免與登錄細節混淆,我希望CakePHP處理用戶登錄事物,直到我可以完全關閉CakePHP並依賴Symfony 2的安全性。與此同時,CakePHP應用程序生成一個包含用戶ID的cookie。我想用Symfony的這個cookie作爲基本的安全形式。
但是,我無法讓Symfony讀取或加載已創建的cookie。這裏是我的代碼:
public function securitytestAction()
{
$request = $this->getRequest($_COOKIE);
$cookie = $request->headers->getCookies('CakeCookie[passport]');
print_r($cookie);
return $this->render('InstructorBundle:Default:test.html.twig');
}
使用Firebug,CakePHP在登錄過程中生成的Cookie名爲'CakeCookie [passport]'。它也沒有加密。
我得到的錯誤是這樣的:
FatalErrorException: Error: Call to undefined method Symfony\Component\HttpFoundation\HeaderBag::getCookies() in DefaultController.php line 713
我能做得到這個工作?
編輯
Cheesemacfly曾建議更換:
$request = $this->getRequest($_COOKIE);
$cookie = $request->headers->getCookies();
通過如此:
$request = $this->getRequest()->cookies->all();
我得到如下回應:
Array ([PHPSESSID] => gptbmh61mfkqn6p86d3suhnt13)
編輯2
我一直在尋找CakePHP用來生成Cookie的代碼,它沒有給出cookie的域名。我現在已經修復了這個問題,以便域名是.domain.org
,這樣子域名也可以訪問它。
現在,當我使用Firebug訪問Symfony2應用程序時,我可以看到Cookie與其他兩個CakePHP會話cookie(我不需要)一起列出。即使在查看子域new.domain.org
時,3個CakePHP域也都使用www.domain.org
,而Symfony2使用的一個cookie顯示域名爲new.domain.org
.Symfony2雖然仍然拒絕加載我想要的Cookie。
如果你不帶參數調用'$ request-> headers-> getCookies()'會怎麼樣? – cheesemacfly
我得到同樣的錯誤@cheesemacfly,我會相應地改變問題先生。 – mickburkejnr
如何使用'$ this-> getRequest() - > cookies-> all()'?或'$ this-> getRequest() - > cookies-> get('CakeCookie [passport]')'? – cheesemacfly