我正在使用jQuery cookie插件设置一个名为'orderStatus'的cookie,其值为'success'。这是工作查找,我已经检查,cookie已正确设置并存在。但是当我在控制器中读取cookie时如此:
$status = $this->Cookie->read('orderStatus');
然后回显$ status的内容为空。谁知道我做错了什么?我设置蛋糕使用cookie组件,这不是问题。感谢
答案 0 :(得分:13)
遗憾的是,您无法读取使用cakephp通过任何其他方法编写的cookie。蛋糕中的Cookie组件并未考虑互操作性。 read方法只能读取由cake cookie组件方法编写的cookie。
为了在您的控制器中读取由javascript设置的cookie,您必须访问PHP原生的$ _COOKIE变量。
答案 1 :(得分:6)
如果您为Cake Cookie组件使用的JavaScript保存的cookie使用相同的命名空间,则它将起作用。命名空间是'CakeCookie'
所以你的cookie必须看起来像:
CakeCookie[your_cookie_name]
答案 2 :(得分:1)
您是否可以设置其他Cookie值?以下代码的输出是什么?
<?php
function testcookie() {
$this->Cookie->write( 'test', 'somevalue' );
echo $this->Cookie->read( 'test' );
}
?>
答案 3 :(得分:0)
首先,这可能对您的应用程序造成很大风险。请记住,Cookie是用户可以自行修改的数据。因此,如果这是验证,则可能存在错误。
现在,我不知道你是否在设置cookie,但是在CakePHP中设置cookie的方法是通过Model.field
语法:
$this->Cookie->read('Order.status');
尝试在同一个控制器上方设置一个cookie,现在尝试阅读它,然后开始回溯它。
答案 4 :(得分:0)
你可以从CakePhp阅读jQuery Cookies,唯一的问题是他们无法加密。
如果您使用的是例如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')
将返回true(cakephp&gt; 2.2)和
$this->Cookie->read('cookie_name')
将返回'hallo'
如果使用cakephp 3.x,这应该是:
$this->Cookie->read('CakeCookie.cookie_name')