CakePHP 3.5中Cookie的设置与获取问题求助
我来帮你搞定这个Cookie的问题,你遇到的其实是CakePHP Cookie机制里很容易踩的坑,咱们一步步来分析:
核心原因:同一个请求内无法读取刚设置的Cookie
你要明白Cookie的工作流程:
当你在代码里用
withCookie()设置Cookie时,这个操作是把Cookie信息添加到响应头里,只有当浏览器收到服务器的响应后,才会把这个Cookie保存到本地。而当前请求的$this->request里的Cookie,是浏览器在发起这个请求时就已经带过来的,根本不包含你刚设置的这个新Cookie。
所以你在设置完Cookie后立刻调用$this->request->getCookie('remember_me'),肯定拿不到值——这不是代码写错了,是机制问题。
怎么验证Cookie是否真的设置成功?
- 打开浏览器开发者工具(按F12),切换到「Application」(Chrome)或「Storage」(Firefox)标签,找到「Cookies」选项,查看对应域名下有没有
remember_me这个Cookie - 发起下一次请求(比如刷新页面、跳转另一个接口),这时候再调用
$this->request->getCookie('remember_me'),就能拿到你设置的yes了
如果需要在当前请求内使用这个值怎么办?
不用非要从Cookie里读,直接把值存在变量里复用就行,比如:
// 先把值存在变量里 $rememberMeValue = 'yes'; // 设置Cookie $this->response = $this->response->withCookie('remember_me', [ 'value' => $rememberMeValue, 'path' => '/', 'httpOnly' => true, 'secure' => false, 'expire' => strtotime('+1 year') ]); // 当前请求内直接用变量,不用走Cookie $rememberMe = $rememberMeValue;
额外检查点
再确认下你的Cookie配置有没有其他问题:
expire参数:strtotime('+1 year')是正确的,但要保证服务器的系统时间是准确的,不然可能导致Cookie提前过期secure设为false:如果你是在本地HTTP环境下测试,这个设置是对的;如果设为true,浏览器只会在HTTPS环境下保存Cookie,本地HTTP就看不到了httpOnly设为true:这是安全设置,不会影响Cookie的存储和传递,只是前端JavaScript没法读取这个Cookie,不影响后端获取
内容的提问来源于stack exchange,提问作者Zahid
相关产品推荐
相关产品推荐

