nodejs +express.cookies.session+mongodb存储 实现登录状态会话

此博客展示了使用Express框架进行开发的代码示例,包含了Session和Cookie的配置。配置了session中间件,将session存储于MongoDB,还设置了cookie的相关属性,如有效期、二级域名共享等。同时给出了获取、设置cookie,登录、退出等路由处理代码。

var createError = require(‘http-errors’);
var express = require(‘express’);
var path = require(‘path’);
var cookieParser = require(‘cookie-parser’);
var session = require(‘express-session’);//express 4.0以上将session 和cookie中间件分开
var logger = require(‘morgan’);
var MongoStore = require(‘connect-mongo’)(session);
var indexRouter = require(’./routes/index’);
var usersRouter = require(’./routes/users’);
var app = express();

// view engine setup
app.set(‘views’, path.join(__dirname, ‘views’));
app.set(‘view engine’, ‘ejs’);

app.use(logger(‘dev’));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser("%@yqf$*/!±"));
app.use(express.static(path.join(__dirname, ‘public’)));
/**

  • @package cookie-session
  • secet:"" 签名(伪加密)
  • resave :
  • saveUninitialized:true;
  • **/
    //配置session中间件
    app.use(session({
    secret:“yqf”,//签名(伪加密 随便写,使用自带方法加密)
    name:“session_id”,//保存在本地cookies的名字 默认为connect_sid
    resave:false,//true :强制保存session 即使没变化 false:不强制保存
    saveUninitialized:true,//强制将未初始化的session存储
    rolling:true,//有操作重新计算时间
    cookie:{
    maxAge:50000,
    httpOnly:true
    },
    store:new MongoStore({
    secret: ‘yqf’,//签名
    url:“mongodb://127.0.0.1:27017/student”,//数据库地址
    touchAfter:24*5000//在指定时间内,只要session内容不变,就会延迟更新通过这样做,设置touchAfter: 24 * 3600你说会话只在24小时内更新一次,无论发生多少请求(除了那些改变会话数据的东西)
    })

}));
//路由设置
app.use(’/’, indexRouter);
app.use(’/users’, usersRouter);
/***

  • @package cookie
  • domain:".yqf.com" 二级域名 cookies 共享
  • path :url 指定目录下使用cookis
  • httponly:true 只能在服务器端设置cookies 客户端无法通过js获取cookies的值 document.cookies无法获取值
  • signed 设置cookieParser(“加密数据标识”)
  • */
    app.get(’/getCookies’,function (req,res) {
    console.log(req.signedCookies.citys);
    res.send(“你浏览过的城市为-”+req.signedCookies.citys);
    });
    app.get(’/setCookies’,function (req,res) {
    //获取数据
    var city = req.query.city;
    // 获取缓存Cookies数据
    var citys = req.signedCookies.citys;
    // 设置cookis
    if(citys){//判断是否存在Cookies
    var reSign = false;
    citys.forEach(function (value,index) {
    if(value==city){//判断是否重复
    reSign = true;
    return;
    }
    });
    if (!reSign) {//如果Cookies不重复,数据追加
    citys.push(city);
    }
    }else {
    //判断是否为第一次缓存Cookies
    citys = [];
    citys.push(city);
    }
    res.cookie(“citys”,citys,{maxAge:5000, domain:’.yqf.com’,httpOnly:true,signed:true});
    res.send(“你浏览过的城市为——”+city);

});
app.get(’/index’,function (req,res) {
console.log(req.session.userName);
if(req.session.userName){
res.send(“欢迎再次回来”+req.session.userName);
}else{
res.send(“未登录”);
}

});
//登录
app.get(’/login’,function (req,res) {
// 设置session 信息
req.session.userName = “yqf”;
res.send(“登录成功”);
});
//退出 销毁session
app.use(’/logOut’,function (req,res) {
req.session.cookie.maxAge = 0;//销毁session登录信息
res.send(“退出登录”)
});
// catch 404 and forward to error handler
// app.use(function(req, res, next) {
// next(createError(404));
// });

// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get(‘env’) === ‘development’ ? err : {};

// render the error page
res.status(err.status || 500);
res.render(‘error’);
});

app.listen(8080,function () {
console.log(“port is 8080”);
})
// module.exports = app;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_42975115

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值