在 Web 开发中,Cookie 是一种非常重要的机制,它允许服务器在客户端浏览器上存储少量数据。这些数据可以在后续的请求中被发送回服务器,从而实现一些诸如用户状态跟踪、个性化设置等功能。在 Node.js 中,我们可以方便地进行 Cookie 的设置与读取操作。下面将详细介绍如何在 Node.js 中进行 Cookie 的设置与读取。
Cookie 是服务器发送到用户浏览器并保存在本地的一小块数据。它会在浏览器下次向同一服务器再发起请求时被携带上并发送到服务器上。可以将其看作是服务器和客户端之间的一个“小纸条”,用来存储一些必要的信息。
在 Node.js 中,我们可以使用内置的 http
模块来创建一个简单的 HTTP 服务器,并在响应头中设置 Cookie。以下是一个示例代码:
const http = require('http');
const server = http.createServer((req, res) => {
// 设置 Cookie
res.setHeader('Set-Cookie', 'username=JohnDoe; Max-Age=3600; Path=/');
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Cookie has been set!');
});
const port = 3000;
server.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
http
模块:使用 require('http')
引入 Node.js 的内置 http
模块。http.createServer()
方法创建一个 HTTP 服务器,并传入一个回调函数,该回调函数接收 req
(请求对象)和 res
(响应对象)作为参数。res.setHeader('Set-Cookie',...)
方法在响应头中设置 Cookie。这里设置了一个名为 username
的 Cookie,值为 JohnDoe
,并设置了其最大存活时间为 3600 秒(即 1 小时),路径为根路径 /
。res.writeHead()
方法设置响应状态码和内容类型,然后使用 res.end()
方法结束响应。server.listen()
方法启动服务器,并监听指定的端口。属性名 | 说明 |
---|---|
Name |
Cookie 的名称,用于唯一标识该 Cookie。 |
Value |
Cookie 的值,存储具体的数据。 |
Max-Age |
Cookie 的最大存活时间,以秒为单位。设置为 0 或负数时,Cookie 会立即过期。 |
Path |
指定 Cookie 适用的路径。只有在该路径下的请求才会携带该 Cookie。 |
Domain |
指定 Cookie 适用的域名。只有在该域名下的请求才会携带该 Cookie。 |
Expires |
Cookie 的过期时间,是一个具体的日期和时间。 |
Secure |
如果设置为 true ,则只有在使用 HTTPS 协议时,Cookie 才会被发送到服务器。 |
HttpOnly |
如果设置为 true ,则该 Cookie 只能通过 HTTP 请求访问,不能通过 JavaScript 脚本访问,从而提高了安全性。 |
在 Node.js 中,我们可以从请求头中读取客户端发送的 Cookie。以下是一个示例代码:
const http = require('http');
const server = http.createServer((req, res) => {
// 读取 Cookie
const cookies = req.headers.cookie;
if (cookies) {
const cookieArray = cookies.split('; ');
const cookieObj = {};
cookieArray.forEach(cookie => {
const [name, value] = cookie.split('=');
cookieObj[name] = value;
});
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end(`Read Cookie: ${JSON.stringify(cookieObj)}`);
} else {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('No Cookie found!');
}
});
const port = 3000;
server.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
req.headers.cookie
获取客户端发送的 Cookie。;
分割成数组,然后遍历数组,将每个 Cookie 按 =
分割成名称和值,并存储在一个对象中。通过上述示例,我们了解了在 Node.js 中如何设置和读取 Cookie。设置 Cookie 主要是通过在响应头中添加 Set-Cookie
字段,而读取 Cookie 则是从请求头中获取并解析。在实际开发中,我们可以根据具体需求设置不同的 Cookie 属性,以实现各种功能。同时,为了提高安全性,建议使用 HttpOnly
和 Secure
属性来保护 Cookie 数据。
希望本文对你理解 Node.js 中的 Cookie 操作有所帮助!