推荐答案
在 Koa 中设置 Cookie 可以通过 ctx.cookies.set() 方法来实现。以下是一个简单的示例:
// www.javascriptcn.com code example
const Koa = require('koa');
const app = new Koa();
app.use(async (ctx) => {
// 设置一个名为 'name' 的 Cookie,值为 'Koa'
ctx.cookies.set('name', 'Koa', {
httpOnly: true, // 仅服务器可访问
maxAge: 1000 * 60 * 60 * 24, // 过期时间为 1 天
signed: true // 启用签名
});
ctx.body = 'Cookie has been set';
});
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});本题详细解读
1. ctx.cookies.set() 方法
ctx.cookies.set() 是 Koa 中用于设置 Cookie 的方法。它接受三个参数:
- name: Cookie 的名称,类型为字符串。
- value: Cookie 的值,类型为字符串。
- options: 可选的配置对象,用于设置 Cookie 的各种属性。
2. 常用 options 配置
- httpOnly: 布尔值,默认为
false。如果设置为true,则 Cookie 只能通过 HTTP 请求访问,无法通过 JavaScript 访问,增强了安全性。 - maxAge: 数字,表示 Cookie 的有效期(以毫秒为单位)。例如,
maxAge: 1000 * 60 * 60 * 24表示 Cookie 的有效期为 1 天。 - signed: 布尔值,默认为
false。如果设置为true,则 Cookie 会被签名,防止客户端篡改。 - expires:
Date对象,表示 Cookie 的过期时间。如果同时设置了maxAge和expires,maxAge优先。 - path: 字符串,表示 Cookie 的路径。默认为
'/',表示该路径下的所有页面都可以访问该 Cookie。 - domain: 字符串,表示 Cookie 的域名。默认为当前域名。
- secure: 布尔值,默认为
false。如果设置为true,则 Cookie 只能通过 HTTPS 协议传输。
3. 示例代码解析
在示例代码中,我们创建了一个 Koa 应用,并在中间件中使用 ctx.cookies.set() 方法设置了一个名为 name 的 Cookie。该 Cookie 的值为 'Koa',并且配置了 httpOnly、maxAge 和 signed 选项。
httpOnly: true表示该 Cookie 只能通过 HTTP 请求访问,无法通过 JavaScript 访问。maxAge: 1000 * 60 * 60 * 24表示该 Cookie 的有效期为 1 天。signed: true表示该 Cookie 会被签名,防止客户端篡改。
最后,服务器会返回一个简单的响应 'Cookie has been set',表示 Cookie 已经成功设置。