2010-12-08 69 views
4

我正在使用jQuery cookie插件来设置一个cookie,名为'orderStatus',值为'success'。这是工作查找,我已经检查,cookie设置正确并存在。然而,当我来读我的控制器饼干,像这样:Cakephp:读取cookie问题

$status = $this->Cookie->read('orderStatus'); 

,然后呼应$ status的内容为空。任何人都知道我在做什么错了?我已经设置了使用cookie组件的蛋糕,所以这不是问题。谢谢

回答

11

答案很遗憾,您无法阅读使用cakephp通过任何其他方法编写的cookie。 Cake中的Cookie组件并没有考虑到互操作性。 read方法只能读取由cookie cookie组件方法写入的cookie。

为了读取您的控制器中由javascript设置的cookie,您必须访问PHP原生的$ _COOKIE变量。

+0

这是可能的 - 检查我的答案在下面。 – kriskodzi 2015-05-13 09:48:30

0

首先,这可能会对您的应用程序造成很大的风险。请记住,Cookie是用户可以自行修改的数据。所以如果这是验证,可能会有错误。现在

,我不知道您是否设置cookie,而是设置在CakePHP中饼干的方法是通过Model.field语法:

$this->Cookie->read('Order.status'); 

尝试设置相同的控制器上面一个cookie,现在尝试阅读并开始回溯。

+0

你是对的,在某些情况下,它可能有严重的安全问题,但在我的情况下,我用它来显示欧盟饼干政策,所以我不在乎是否有人会删除该cookie,他们将不得不再次看到警告。 – 2014-07-17 12:30:37

1

你能够设置其他cookie值吗?以下代码的输出是什么?

<?php 
function testcookie() { 
    $this->Cookie->write('test', 'somevalue'); 
    echo $this->Cookie->read('test'); 
} 
?> 
6

如果您使用相同的命名空间作为由Cookie保存的Cookie,并且Cookie Cookie组件使用该命名空间作为默认名称空间。命名空间是“CakeCookie”

所以你的cookie必须像:

CakeCookie[your_cookie_name] 
0

你可以阅读从CakePHP的jQuery的饼干,唯一的问题是,他们不能被加密

如果您使用的是例如jCookie(https://github.com/carhartl/jquery-cookie),下面的代码将为您工作,将myCompany替换为配置文件中的Cookie名称。

$.cookie.raw = true; 
$.cookie('myCompany[cookie_name]', 'hallo', { expires: 365, path: '/'}); 

然后,在你的控制器:

$this->Cookie->check('cookie_name') 

如果使用CakePHP 3将返回true(CakePHP的> 2.2)和

$this->Cookie->read('cookie_name') 

将返回 '喂'

。 x应该是这样的:

$this->Cookie->read('CakeCookie.cookie_name')