我正在为我工作的公司使用的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