如何在NextJS 9的API路由中为响应对象设置Cookie?
当然可以!Next.js API路由里的res对象是Node.js原生的http.ServerResponse实例,不像Express那样封装了cookie方法,但我们完全可以通过手动设置响应头的方式来实现Cookie的设置,下面给你两种实用的方案:
方案1:手动构造Cookie字符串
直接通过res.setHeader()设置Set-Cookie响应头,需要自己拼接符合HTTP规范的Cookie字符串,包含键值对以及各类安全、有效期属性。
示例代码:
export default function handler(req, res) { // 构造符合规范的Cookie字符串 const sessionCookie = `session=your-unique-session-id; HttpOnly; Path=/; Max-Age=86400; SameSite=Lax`; // 将Cookie写入响应头 res.setHeader('Set-Cookie', sessionCookie); // 返回业务响应 res.status(200).json({ message: 'Session Cookie已成功设置' }); }
这里解释几个关键属性的作用:
HttpOnly:禁止前端JavaScript访问该Cookie,有效防范XSS攻击Path=/:指定Cookie在整个站点范围内生效Max-Age=86400:设置Cookie有效期为24小时(单位为秒)SameSite=Lax:限制Cookie跨域发送,降低CSRF攻击风险
如果需要同时设置多个Cookie,可以传入数组形式的参数:
res.setHeader('Set-Cookie', [ 'session=your-unique-session-id; HttpOnly; Path=/', 'user_preference=dark_mode; Path=/; Max-Age=31536000' ]);
方案2:使用cookie库简化操作
手动拼接Cookie字符串容易出现格式错误,推荐使用npm官方维护的cookie包来自动生成符合规范的Cookie内容,步骤如下:
- 先安装依赖包:
npm install cookie # 或使用yarn yarn add cookie
- 在API路由中引入并使用:
import { serialize } from 'cookie'; export default function handler(req, res) { // 用serialize方法快速生成Cookie字符串 const sessionCookie = serialize('session', 'your-unique-session-id', { httpOnly: true, path: '/', maxAge: 86400, sameSite: 'lax', // 生产环境务必开启secure,确保Cookie仅在HTTPS连接中传输 secure: process.env.NODE_ENV === 'production' }); res.setHeader('Set-Cookie', sessionCookie); res.status(200).json({ message: 'Session Cookie已成功设置' }); }
这个方法更简洁可靠,能自动处理属性的格式转换,避免手动拼接可能出现的疏漏。
额外注意事项
- 生产环境下必须设置
secure: true,否则Cookie可能在HTTP连接中被窃取 - 如果需要跨子域共享Cookie,可添加
domain: '.your-domain.com'属性(注意前缀的点号) - 若要设置临时Cookie(关闭浏览器即失效),可以省略
Max-Age和Expires属性
内容的提问来源于stack exchange,提问作者Thingamajig
相关产品推荐
相关产品推荐

