推荐答案
// www.javascriptcn.com code example
const express = require('express');
const session = require('express-session');
const app = express();
// 配置 express-session 中间件
app.use(session({
secret: 'your-secret-key', // 用于签名会话 ID 的密钥
resave: false, // 强制将会话保存回会话存储区,即使会话没有被修改
saveUninitialized: true, // 强制将未初始化的会话保存到存储区
cookie: { secure: false } // 设置 cookie 的安全选项,secure: true 时仅通过 HTTPS 传输
}));
// 示例路由,设置会话数据
app.get('/set-session', (req, res) => {
req.session.username = 'JohnDoe';
res.send('Session data set');
});
// 示例路由,获取会话数据
app.get('/get-session', (req, res) => {
const username = req.session.username || 'Guest';
res.send(`Hello, ${username}`);
});
// 示例路由,销毁会话
app.get('/destroy-session', (req, res) => {
req.session.destroy((err) => {
if (err) {
return res.send('Error destroying session');
}
res.send('Session destroyed');
});
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});本题详细解读
1. 引入 express-session 中间件
首先,我们需要通过 require('express-session') 引入 express-session 中间件。这个中间件用于在 Express 应用中管理会话。
2. 配置 express-session
在 app.use(session({...})) 中,我们配置了 express-session 中间件。配置项包括:
secret: 用于签名会话 ID 的密钥。这个密钥应该是一个随机字符串,用于防止会话被篡改。resave: 如果设置为true,即使会话没有被修改,也会强制将会话保存回会话存储区。通常建议设置为false。saveUninitialized: 如果设置为true,即使会话没有被初始化(即没有数据被存储),也会强制将未初始化的会话保存到存储区。通常建议设置为true。cookie: 用于配置会话 cookie 的选项。secure: true时,cookie 仅通过 HTTPS 传输。
3. 设置会话数据
在 /set-session 路由中,我们通过 req.session.username = 'JohnDoe' 设置了会话数据。这个数据会被存储在服务器端,并且可以通过 req.session 对象在后续请求中访问。
4. 获取会话数据
在 /get-session 路由中,我们通过 req.session.username 获取之前设置的会话数据。如果会话中没有 username 数据,则默认返回 'Guest'。
5. 销毁会话
在 /destroy-session 路由中,我们通过 req.session.destroy() 销毁当前会话。销毁后,会话数据将被清除,用户需要重新登录或重新设置会话数据。
6. 启动服务器
最后,我们通过 app.listen(3000, ...) 启动服务器,监听 3000 端口。