Node.js express框架 session保存到(mongodb)数据库中(分布式web共享session)

本文介绍了如何在 Node.js 的 Express 框架中配置 session,利用 MongoDB 数据库来持久化 session 数据,实现分布式系统的 session 共享。通过 session-mongo.js 文件的设置,详细讲解了连接 MongoDB 和配置 session 中间件的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



session-mongo.js:

/*
 1.需要安装 express-session 和 connect-mongo 模块
    cnpm install express-session  --save
    cnpm install connect-mongo  --save
 2.引入
    var session = require("express-session");
    var  MongoStore  = require("connect-mongo")(session);
 3.设置中间件(参考npmjs官网)
    app.use(session({
 	   secret: '随机字符串',
	   resave: false,
	   saveUninitialized: true,
	   store:new MongoStore({
	 	 url: 'mongodb://127.0.0.1:27017/student',  //数据库的地址  student是数据库名
	  	 touchAfter: 24 * 3600    //time period in seconds
       })
    }))
 4.设置session
    req.session.username = "张三";
 5.获取session
    req.session.username
 6.销毁session
    req.session.cookie.maxAge=0;  //重新设置过期时间来销毁。cookie中保存有sessionID
    req.session.destroy(function(err){   //通过destroy()函数销毁session
        console.log(err);
    });
*/

var express = require("express");
var app = express();
var session = require("express-session");
var MongoStore  = require("connect-mongo")(session);
//配置中间件
app.use(session({
    secret: 'this is a string key',   // 可以随便写。 一个 String 类型的字符串,作为服务器端生成 session 的签名
    name:'session_id',/*保存在本地cookie的一个名字 默认connect.sid  可以不设置*/
    resave: false,   /*强制保存 session 即使它并没有变化,。默认为 true。建议设置成 false。*/
    saveUninitialized: true,   //强制将未初始化的 session 存储。  默认值是true  建议设置成true
    cookie: {
        maxAge:1000*30*60    /*过期时间*/

    },   /* secure:true  https这样的情况才可以访问cookie */
    rolling:true, //在每次请求时强行设置 cookie,这将重置 cookie 过期时间(默认:false)
    store:new MongoStore({
        url: 'mongodb://127.0.0.1:27017/shop',  //数据库的地址  shop是数据库名
        touchAfter: 24 * 3600   // 通过这样做,设置touchAfter:24 * 3600,您在24小时内只更新一次会话,不管有多少请求(除了在会话数据上更改某些内容的除外)
    })
}));

app.get("/",function(req,res){
    if(req.session.userinfo){  //获取session
        res.send('你好'+req.session.userinfo+'欢迎回来');
    }else{
        res.send('未登录');
    }
});

app.get("/login",function(req,res){
    req.session.userinfo='张三';  //设置session
    res.send('登录成功');
});

app.get("/logOut",function(req,res){
    //req.session.cookie.maxAge=0;  //重新设置过期时间来销毁。cookie中保存有sessionID
    req.session.destroy(function(err){  //通过destroy()函数销毁session
        console.log(err);
    });
    res.send('退出登录成功');
});

app.listen(3001);



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值