前言
在前端开发中,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
特点
- Cookie 保存在客户端浏览器的内存中,比较容易受到攻击,如 XSS 攻击,CSRF 攻击等;
- Cookie 只能存储少量数据,一般不能超过 4KB;
- Cookie 可以设置过期时间,当过期时间到达后,Cookie 将自动销毁;
- 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
特点
- Session 保存在服务器的内存中,相对于 Cookie,更不容易受到攻击;
- Session 可以存储大量数据;
- Session 只有在客户端关闭浏览器时,服务器才释放内存;
- Session 的默认存储方式为内存,可以配合使用 express-session 模块的其他 session 存储方式。
区别
通过上述的介绍,我们可以总结出 Cookie 和 Session 的区别:
- 存储位置:Cookie 存储在客户端浏览器中,而 Session 存储在服务器的内存中;
- 存储方式:Cookie 可以存储在客户端浏览器中的文件或数据库中,而 Session 只能存储在服务器中;
- 存储数据量:Cookie 存储的数据量较小,一般不能超过 4KB,而 Session 可以存储大量的数据;
- 安全性:相对于 Cookie,Session 更安全,不容易受到攻击。
总结
Cookie 和 Session 都是前端存储机制,各有自身的特点和优势。在实际项目中,我们可以根据实际需求和安全性要求来决定是否使用 Cookie 和 Session。当我们需要存储少量数据,并具有可携带性时,可以使用 Cookie,而需要存储大量数据,且安全性要求高时,可以使用Session。
在使用时,需要注意 Cookie 和 Session 的使用方法以及其特点,以便避免数据泄漏和攻击。
参考文献
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65a6527dadd4f0e0fff13ecc