Cakephp 如何使用Symfony 2读取Cookie?
我正在为我工作的公司使用的web应用程序构建一个替代品。它是使用CakePHP1.3构建的,我正在使用Symfony 2从头重写它。这两个系统将并行运行,各种功能将转移到Symfony 2,并从旧的CakePHP应用程序中删除 为了避免与登录细节混淆,我希望CakePHP处理用户登录方面的事情,直到我完全可以关闭CakePHP并依赖于Symfony 2的安全性为止。同时,CakePHP应用程序生成一个包含用户ID的cookie。我想将此cookie用于Symfony作为基本的安全形式 但是,我无法让Symfony读取或加载已创建的cookie。这是我的密码:Cakephp 如何使用Symfony 2读取Cookie?,cakephp,symfony,cookies,Cakephp,Symfony,Cookies,我正在为我工作的公司使用的web应用程序构建一个替代品。它是使用CakePHP1.3构建的,我正在使用Symfony 2从头重写它。这两个系统将并行运行,各种功能将转移到Symfony 2,并从旧的CakePHP应用程序中删除 为了避免与登录细节混淆,我希望CakePHP处理用户登录方面的事情,直到我完全可以关闭CakePHP并依赖于Symfony 2的安全性为止。同时,CakePHP应用程序生成一个包含用户ID的cookie。我想将此cookie用于Symfony作为基本的安全形式 但是,我无
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:错误:调用未定义的方法
中的Symfony\Component\HttpFoundation\HeaderBag::getCookies()
DefaultController.php第713行
我该怎么做才能让它工作
编辑Cheesemaly建议更换:
$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(我不需要)。3个CakePHP域都使用
www.domain.org
,即使在查看子域new.domain.org
时也是如此,而Symfony2使用的cookie将其域名显示为new.domain.org
.Symfony2,但仍然拒绝加载我想要的cookie。在每次请求期间,默认情况下,Symfony2将在Twig和PHP模板引擎中设置全局模板变量app。app变量是一个GlobalVariables实例,可让您自动访问某些特定于应用程序的变量:
app.security - The security context.
app.user - The current user object.
app.request - The request object.
app.session - The session object.
app.environment - The current environment (dev, prod, etc).
app.debug - True if in debug mode. False otherwise.
示例:
在细枝中:{{app.request.method}
在PHP中:echo$app->getRequest()->getMethod()在twig:{{app.user.username}
但是对于会话对象:
在细枝中:{{app.session.varname}
在PHP中://我不知道,你知道怎么称呼它吗?我在朋友的帮助下找到了它 本质上,在CakePHP中设置的cookie不包含路径。为了解决这个问题,我添加了以下PHP代码:
$value = $someone['User']['id'];
setcookie("passport", $value, time()+1200, "/", ".domain.org");
然后我检查了Symfony2,没有更改上一次编辑的代码,然后Symfony2就可以拿起cookie了
谢谢大家的帮助 如果您在没有参数的情况下调用
$request->headers->getCookies()
,会怎么样?我得到了相同的错误@cheesemacfly,我会相应地更改问题,先生。使用$this->getRequest()->cookies->all()
怎么样?或者$this->getRequest()->cookies->get('CakeCookie[passport]”)
?使用更改编辑我的答案。你的第二个建议没有得到答复。我已经检查了Firebug,Cookie设置在旧应用程序中。这两个应用程序都在哪里(哪个域/路径)?