我正在为我工作的公司使用的 Web 应用程序构建一个替代品。它是使用 CakePHP 1.3 构建的,我正在使用 Symfony 2 从头开始重写它。这两个系统将并行运行,各种功能被转移到 Symfony 2 并从旧的 CakePHP 应用程序中删除。
为了避免与登录细节混淆,我希望 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:错误:在 DefaultController.php 第 713 行调用未定义的方法 Symfony\Component\HttpFoundation\HeaderBag::getCookies()
我该怎么做才能让它工作?
编辑
Cheesemacfly 建议更换:
$request = $this->getRequest($_COOKIE);
$cookie = $request->headers->getCookies();
就这样:
$request = $this->getRequest()->cookies->all();
我得到以下回复:
数组([PHPSESSID] => gptbmh61mfkqn6p86d3suhnt13)
编辑 2
我一直在查看 CakePHP 用于生成 Cookie 的代码,但它没有为 cookie 提供域。我现在已经修复了它,以便域为.domain.org
,以便子域也可以访问它。
现在,当我使用 Firebug 访问 Symfony2 应用程序时,我可以看到 Cookie 与其他两个 CakePHP 会话 cookie(我不需要)一起列出。www.domain.org
即使在查看 subdomain 时, 3 个 CakePHP 域都在使用new.domain.org
,而 Symfony2 使用的一个 cookie 将其域名显示为new.domain.org
.Symfony2 尽管仍然拒绝加载我想要的 Cookie。