微信登录

Cookie 与 Session - Cookie 操作 - 设置与读取

Node.js 《Cookie 与 Session - Cookie 操作 - 设置与读取》

在 Web 开发中,Cookie 是一种非常重要的机制,它允许服务器在客户端浏览器上存储少量数据。这些数据可以在后续的请求中被发送回服务器,从而实现一些诸如用户状态跟踪、个性化设置等功能。在 Node.js 中,我们可以方便地进行 Cookie 的设置与读取操作。下面将详细介绍如何在 Node.js 中进行 Cookie 的设置与读取。

什么是 Cookie

Cookie 是服务器发送到用户浏览器并保存在本地的一小块数据。它会在浏览器下次向同一服务器再发起请求时被携带上并发送到服务器上。可以将其看作是服务器和客户端之间的一个“小纸条”,用来存储一些必要的信息。

设置 Cookie

在 Node.js 中,我们可以使用内置的 http 模块来创建一个简单的 HTTP 服务器,并在响应头中设置 Cookie。以下是一个示例代码:

  1. const http = require('http');
  2. const server = http.createServer((req, res) => {
  3. // 设置 Cookie
  4. res.setHeader('Set-Cookie', 'username=JohnDoe; Max-Age=3600; Path=/');
  5. res.writeHead(200, { 'Content-Type': 'text/plain' });
  6. res.end('Cookie has been set!');
  7. });
  8. const port = 3000;
  9. server.listen(port, () => {
  10. console.log(`Server is running on port ${port}`);
  11. });

代码解释

  1. 引入 http 模块:使用 require('http') 引入 Node.js 的内置 http 模块。
  2. 创建 HTTP 服务器:使用 http.createServer() 方法创建一个 HTTP 服务器,并传入一个回调函数,该回调函数接收 req(请求对象)和 res(响应对象)作为参数。
  3. 设置 Cookie:使用 res.setHeader('Set-Cookie',...) 方法在响应头中设置 Cookie。这里设置了一个名为 username 的 Cookie,值为 JohnDoe,并设置了其最大存活时间为 3600 秒(即 1 小时),路径为根路径 /
  4. 发送响应:使用 res.writeHead() 方法设置响应状态码和内容类型,然后使用 res.end() 方法结束响应。
  5. 启动服务器:使用 server.listen() 方法启动服务器,并监听指定的端口。

Cookie 属性说明

属性名 说明
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 脚本访问,从而提高了安全性。

读取 Cookie

在 Node.js 中,我们可以从请求头中读取客户端发送的 Cookie。以下是一个示例代码:

  1. const http = require('http');
  2. const server = http.createServer((req, res) => {
  3. // 读取 Cookie
  4. const cookies = req.headers.cookie;
  5. if (cookies) {
  6. const cookieArray = cookies.split('; ');
  7. const cookieObj = {};
  8. cookieArray.forEach(cookie => {
  9. const [name, value] = cookie.split('=');
  10. cookieObj[name] = value;
  11. });
  12. res.writeHead(200, { 'Content-Type': 'text/plain' });
  13. res.end(`Read Cookie: ${JSON.stringify(cookieObj)}`);
  14. } else {
  15. res.writeHead(200, { 'Content-Type': 'text/plain' });
  16. res.end('No Cookie found!');
  17. }
  18. });
  19. const port = 3000;
  20. server.listen(port, () => {
  21. console.log(`Server is running on port ${port}`);
  22. });

代码解释

  1. 获取请求头中的 Cookie:使用 req.headers.cookie 获取客户端发送的 Cookie。
  2. 解析 Cookie:如果存在 Cookie,则将其按 ; 分割成数组,然后遍历数组,将每个 Cookie 按 = 分割成名称和值,并存储在一个对象中。
  3. 发送响应:将解析后的 Cookie 对象以 JSON 字符串的形式发送回客户端。如果没有找到 Cookie,则返回相应的提示信息。

总结

通过上述示例,我们了解了在 Node.js 中如何设置和读取 Cookie。设置 Cookie 主要是通过在响应头中添加 Set-Cookie 字段,而读取 Cookie 则是从请求头中获取并解析。在实际开发中,我们可以根据具体需求设置不同的 Cookie 属性,以实现各种功能。同时,为了提高安全性,建议使用 HttpOnlySecure 属性来保护 Cookie 数据。

希望本文对你理解 Node.js 中的 Cookie 操作有所帮助!

Cookie 与 Session - Cookie 操作 - 设置与读取