Nodejs node express session怎么用

Nodejs node express session怎么用

我像用node express3.0搭了一个注册登录用的网站,写了简单的界面,用mongoose来做数据库。 然后问题来了,登录之后是用Session来记录的,那么在服务器端记录的session是存在内存中,还是存在mongo数据库中? 存在mongo中是不是应该用到require(‘session-mongoose’)?
小白想问一下session到底是怎么用的,有没有好一点的例子。看了一堆博客表示他们写得大多太乱了…… 有没有大神提供小工程借我参考一下~

5 回复

当然可以!下面是一个简单的例子,展示如何使用 Node.js 和 Express 3.0 搭建一个带有会话管理功能的网站。我们将使用 MongoDB 存储会话数据,并使用 express-sessionconnect-mongo 来实现这一点。

安装必要的依赖

首先,确保你已经安装了以下依赖:

npm install express mongoose connect-mongo express-session

示例代码

server.js

const express = require('express');
const session = require('express-session');
const MongoStore = require('connect-mongo')(session);
const mongoose = require('mongoose');

// 连接 MongoDB
mongoose.connect('mongodb://localhost:27017/mydatabase', {
    useNewUrlParser: true,
    useUnifiedTopology: true
});

const app = express();

// 配置 session 中间件
app.use(session({
    secret: 'your_secret_key',
    resave: false,
    saveUninitialized: false,
    store: new MongoStore({ mongooseConnection: mongoose.connection })
}));

// 示例路由
app.get('/', (req, res) => {
    if (req.session.user) {
        res.send(`Hello, ${req.session.user.name}!`);
    } else {
        res.send('Hello, Guest!');
    }
});

app.post('/login', (req, res) => {
    const { username, password } = req.body;
    // 这里可以添加实际的用户验证逻辑
    if (username === 'test' && password === 'password') {
        req.session.user = { name: username };
        res.redirect('/');
    } else {
        res.send('Login failed.');
    }
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

解释

  1. 连接 MongoDB

    • 使用 mongoose 连接到 MongoDB 数据库。
  2. 配置 session 中间件

    • 使用 express-session 配置会话中间件,并通过 MongoStore 将会话存储在 MongoDB 中。
    • secret 是用于签名会话 cookie 的密钥,确保安全性。
    • store 设置为 new MongoStore,将会话数据存储在 MongoDB 中。
  3. 路由处理

    • / 路由检查当前会话中的用户信息,并返回相应的欢迎消息。
    • /login 路由处理登录请求,如果用户名和密码正确,则设置会话并重定向到首页。

总结

以上代码展示了如何使用 express-sessionconnect-mongo 在 Express 应用中管理会话。你可以根据需要扩展这个示例,例如添加更多的路由、表单验证等。希望这对你的项目有帮助!


如果要持久就存数据库中

你理解得都对。资料还是看博客吧

参考我的git吧。刚好在写这个例子。https://github.com/eeandrew/CookieAndSession 为什么还用express3.0?

在Express 3.x中使用Session时,你可以选择将Session数据存储在内存、文件系统或MongoDB等持久化存储中。默认情况下,Session数据会存储在内存中,但这在生产环境中并不推荐,因为每次重启服务器都会丢失Session数据。

存储Session数据在MongoDB中的步骤

为了将Session数据存储在MongoDB中,你需要使用express-session模块和session-mongoose模块。

  1. 安装必要的依赖包:

    npm install express express-session mongoose session-mongoose
    
  2. 在你的应用中配置Session:

const express = require('express');
const session = require('express-session');
const MongoStore = require('session-mongoose')(session);

const app = express();

app.use(session({
    secret: 'your_secret_key', // 用于签名Session ID Cookie的密钥
    store: new MongoStore({ // 使用session-mongoose作为存储后端
        url: 'mongodb://localhost/your_database_name' // MongoDB数据库连接字符串
    }),
    resave: false,
    saveUninitialized: false
}));

app.get('/login', (req, res) => {
    req.session.user = { id: 1, name: 'John Doe' };
    res.send('Logged in.');
});

app.get('/profile', (req, res) => {
    if (req.session.user) {
        res.send(`Welcome ${req.session.user.name}`);
    } else {
        res.redirect('/login');
    }
});

app.listen(3000, () => console.log('Server started on port 3000'));

示例解释

  • secret: 一个用于签名Session ID Cookie的密钥。在生产环境中应设置为强密钥。
  • store: session-mongoose实例,用于将Session数据存储在MongoDB中。
  • resavesaveUninitialized: 控制Session的行为。resavefalse意味着不会保存未修改的Session,saveUninitializedfalse意味着不会保存未初始化的Session。

以上就是一个基本的Express 3.x应用如何使用Session,并将其存储在MongoDB中的示例。

回到顶部