我在读取cookie中的关联数组时遇到问题。
当我在控制器中这样设置时:
$this->set('info', $this->Cookie->read('info'));
我可以在视图中以这种方式读取数据:
$info[0]['records'];
['person_id'=> 2,...]
当我这样做时(因为我从一个视图单元中读取了cookie):
$this->set('info', $this->request->cookie('info'));
我将关联数组作为字符串。 (?)整个数组是一个字符串:
'。''[{“person_id”:2,...“}}''。'
那么,我怎么能'避免'这个?为什么它通过'request'成为String?
编辑:
在CakePHP中,当您尝试通过“请求”(2.)检索cookie时,通常会获得cookie的哈希值。创建cookie时,我禁用了散列。也许我没有正确地做到这一点。
是否也可以在视图单元格中取消它?
答案 0 :(得分:0)
你有一个JSON字符串。
Cookie组件默认存储JSON编码的所有数据,并且还加密(默认情况下为AES)。因此,它还会在读取cookie时对数据进行解密和解码。
当cookie未加密时,您可以轻松地对其进行JSON解码。
$decoded = json_decode($encoded, true);
如果您也使用加密,并且/或者您不确定该值是否为JSON编码,您可以使用Cookie组件在控制器级别解密/解码Cookie,例如
$this->request->coookies['info'] = $this->Cookie->read('info');
或将其设置为视图变量,您可以将其作为参数传递给您的单元格。
另请参阅 Cookbook > Views > View Cells > Passing Arguments to a Cell
从CakePHP 3.1.7开始,您也可以使用cookie组件使用的\Cake\Utility\CookieCryptTrait
特征。只需将其添加到您的类中,实现CookieCryptTrait::_getCookieEncryptionKey()
方法即可返回正确的加密密钥(默认情况下为安全盐),并使用CookieCryptTrait::_decrypt()
来解密cookie数据。
另请参阅 API > \Cake\Utility\CookieCryptTrait
虽然这可以在一个单元中工作,但“问题”是单元需要知道来自外部世界的东西才能使其工作,它需要知道加密密钥和加密模式。就个人而言,我可能会使用前一种方法,如果它需要是后者,则将密钥和模式作为参数传递给单元格。