Cakephp Can';t从另一个控制器设置cookie

Cakephp Can';t从另一个控制器设置cookie,cakephp,cakephp-3.0,Cakephp,Cakephp 3.0,我想为CakePhp站点制作一个统计数据,出于某种原因,我需要设置一个Cookie,以便跟踪用户 然后,在我的StatController中,我创建了一个简单的函数,其中包含一个$this->Cookie->write,并从我的主布局中发出了一个actionRequest。饼干不在那儿 另外,我尝试从AppController调用该函数,结果相同,没有cookie 最后一件事是创建一个元素,所以我将它放在主布局中,并在元素内部尝试requestAction 三条路,饼干就不在了 如果我用setc

我想为CakePhp站点制作一个统计数据,出于某种原因,我需要设置一个Cookie,以便跟踪用户

然后,在我的StatController中,我创建了一个简单的函数,其中包含一个$this->Cookie->write,并从我的主布局中发出了一个actionRequest。饼干不在那儿

另外,我尝试从AppController调用该函数,结果相同,没有cookie

最后一件事是创建一个元素,所以我将它放在主布局中,并在元素内部尝试requestAction

三条路,饼干就不在了

如果我用setcookie设置cookie,那么它就工作了

顺便说一句,我已经加载了Cookie组件

我在某个地方读到,您不能使用您首先调用的控制器以外的其他控制器创建/读取cookie,因为控制器仅用于传递值


我尝试作为常规控制器,也尝试作为组件,但相同的结果已被弃用,您最好为该功能寻找替代结构,而不是尝试通过cookie强制它。从你所写的来看,不管怎么说,cookies似乎是错误的解决方案。不如改为
Configure::write
?cookie用于跟踪整个站点的用户。据我所知,Configure::write用于在站点上设置内容。也许我理解错了。无法使用会话,因为当用户关闭浏览器时,会话会丢失。因此,您需要跨页面加载持久化的数据,但在设置会话并调用
requestAction
时,也需要它立即工作?从你的帖子里还不清楚。如果是这种情况,我认为更典型的解决方案是将数据保存在会话中,并将会话密钥保存在cookie中。因此,问题是我只能在AppController中使用$this->cookie创建cookie,但如果我调用另一个控制器,则无法创建cookie。这就是为什么我会想到requestAction(调用我的Stats控制器)。对我来说,它是一个纯控制器,还是一个组件或插件并不重要。不想在AppController中硬编码我的Stats控制器。一些继承、扩展或其他东西可以完成这项工作,我猜“问题”在于
requestAction
是在内部处理的,而不是通过向服务器生成一个全新的请求(例如,您不会在web服务器日志中看到请求的操作),因此,您编写的任何新cookie实际上都不会包含在传递给Stats控制器的请求对象中。