如何在PHP中获取Node.js应用发送的Cookie
前置说明
你提供的Node.js示例代码存在两处问题,会导致Cookie无法被浏览器正常存储,后续PHP也无法读取:
Set-Cookie必须遵循键名=键值的格式,原代码仅写了type-test没有键值对,浏览器会直接忽略该Cookienew Date().getFullYear是方法引用,缺少执行括号,返回值为函数本体而非当前年份
步骤1:修正Node.js端Cookie设置
修正后的Node.js代码如下:
const express = require('express') const app = express() const port = 3000 app.get('/', (req, res) => { // 规范设置Cookie,指定Path=/保证同域名下所有路径都能访问该Cookie res.setHeader("Set-Cookie","type=test; Path=/; SameSite=Lax"); // 修正getFullYear调用 res.setHeader("Year",new Date().getFullYear()); res.send('Hello World!') }) app.listen(port, () => { console.log(`Example app listening at http://localhost:${port}`) })
如果你的Node.js和PHP服务部署在不同子域名下,还需要在Set-Cookie中补充Domain配置,比如Domain=.example.com,这样两个子域名下的服务都能读取到该Cookie。
步骤2:PHP端读取Cookie
PHP内置了超全局变量$_COOKIE,可以直接读取浏览器携带的所有符合作用域规则的Cookie,示例代码如下:
<?php // 先判断目标Cookie是否存在,避免抛出未定义索引警告 if (isset($_COOKIE['type'])) { $cookieValue = $_COOKIE['type']; echo "获取到Node.js设置的Cookie值:" . $cookieValue; } else { echo "未找到对应的Cookie"; } ?>
注意事项
- 你代码中设置的
Year是自定义响应头,不属于Cookie,所以不会被浏览器存储,PHP也无法通过$_COOKIE读取到该值 - 如果Node.js和PHP服务跨域,需要在Node.js端配置CORS规则允许携带凭证,同时前端请求时开启
withCredentials配置,否则浏览器不会自动携带Cookie - 如果Cookie设置了
HttpOnly属性,仅服务端可读取,前端JS无法操作,不影响PHP读取
内容的提问来源于stack exchange,提问作者Anuj Todankar
相关产品推荐
相关产品推荐

