如何使用Symfony 2阅读Cookie?

时间:2013-07-22 15:27:46

标签: cakephp symfony cookies

我正在为我工​​作的公司使用的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:错误:调用未定义的方法   Symfony \ Component \ HttpFoundation \ HeaderBag :: getCookies()in   DefaultController.php第713行

我能做些什么才能让它发挥作用?

修改
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时,3个CakePHP域都使用new.domain.org,而Symfony2使用的一个cookie将其域名显示为new.domain.org。虽然Symfony2仍然拒绝加载我想要的Cookie。

2 个答案:

答案 0 :(得分:1)

我在朋友的帮助下想出来了。

基本上,CakePHP中设置的cookie不包含路径。为了解决这个问题,我添加了以下PHP代码:

$value = $someone['User']['id'];
setcookie("passport", $value, time()+1200, "/", ".domain.org");

然后我检查了Symfony2,没有更改上一次编辑的代码,然后Symfony2可以拿起cookie。

谢谢大家的帮助!

答案 1 :(得分:0)

在每个请求期间,默认情况下,Symfony2将在Twig和PHP模板引擎中设置全局模板变量应用程序。 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中://我不知道,你知道怎么称它吗?