Express.js 中 cookie 和 session 的区别

前言

在前端开发中,Cookie 和 Session 是非常常用的两种存储方式。它们都可以用来存储用户相关的数据,不过两者有区别。本文将详细介绍 Express.js 中 Cookie 和 Session 的区别,以及它们的使用方法,以便于大家更好地理解它们的区别与联系。

Cookie

定义

Cookie 是一种客户端存储机制,可以用来存储浏览器客户端的一些数据。Cookie 在浏览器中存储,并且每次请求同一个域名下的网页时,浏览器都会自动发送 Cookie 信息给服务器。

使用

在 Express.js 中,使用 Cookie 需要安装 cookie-parser 模块。

const cookieParser = require('cookie-parser');
app.use(cookieParser());

通过 res.cookie() 方法设置 Cookie:

//设置名为 username,值为Tom的 cookie
res.cookie('username', 'Tom');

获取客户端请求的 Cookie:

//获取客户端发送的名为 username 的 cookie
req.cookies.username

特点

  1. Cookie 保存在客户端浏览器的内存中,比较容易受到攻击,如 XSS 攻击,CSRF 攻击等;
  2. Cookie 只能存储少量数据,一般不能超过 4KB;
  3. Cookie 可以设置过期时间,当过期时间到达后,Cookie 将自动销毁;
  4. Cookie 可以设置 HttpOnly 属性,设置后无法通过 JavaScript 访问 Cookie。

Session

定义

Session 是一种服务器端存储机制,可以用来存储Session ID和Session 数据。Session ID 存储在客户端 Cookie 中,每次请求服务器时,都会携带 Session ID 信息,服务器通过 Session ID 来获取对应的 Session 数据。

使用

在 Express.js 中,使用 Session 需要安装 express-session 模块。

const session = require('express-session');
app.use(session({
  secret: 'my_secret_key',  //加密密钥,可随意设置
  resave: false,   //强制将 session 存储到 session store 中
  saveUninitialized: false,  //强制将未初始化的 session 存储到 session store 中
  cookie: { maxAge: 60000 }   //session cookie 最大过期时间
}));

通过 req.session 对象设置 Session:

//设置名为 username, 值为Tom的 session
req.session.username = "Tom";

获取客户端请求的 Session:

//获取客户端发送的 Session 数据
req.session.username

特点

  1. Session 保存在服务器的内存中,相对于 Cookie,更不容易受到攻击;
  2. Session 可以存储大量数据;
  3. Session 只有在客户端关闭浏览器时,服务器才释放内存;
  4. Session 的默认存储方式为内存,可以配合使用 express-session 模块的其他 session 存储方式。

区别

通过上述的介绍,我们可以总结出 Cookie 和 Session 的区别:

  1. 存储位置:Cookie 存储在客户端浏览器中,而 Session 存储在服务器的内存中;
  2. 存储方式:Cookie 可以存储在客户端浏览器中的文件或数据库中,而 Session 只能存储在服务器中;
  3. 存储数据量:Cookie 存储的数据量较小,一般不能超过 4KB,而 Session 可以存储大量的数据;
  4. 安全性:相对于 Cookie,Session 更安全,不容易受到攻击。

总结

Cookie 和 Session 都是前端存储机制,各有自身的特点和优势。在实际项目中,我们可以根据实际需求和安全性要求来决定是否使用 Cookie 和 Session。当我们需要存储少量数据,并具有可携带性时,可以使用 Cookie,而需要存储大量数据,且安全性要求高时,可以使用Session。

在使用时,需要注意 Cookie 和 Session 的使用方法以及其特点,以便避免数据泄漏和攻击。

参考文献

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a6527dadd4f0e0fff13ecc


纠错反馈