session与cookie保留用户登录状态

Express框架不支持session与cookie,使用第三方插件完成这个功能

npm i express-session

谷歌浏览器查看cookie的插件 EditthisCookie

在app.js中使用session插件,这个插件的引用要在挂载路由之前

const session=require("express-session")
//配置session
app.use(session({
  secret: 'encoded', //加密字符串
  resave: false,
  saveUninitialized: true //为真则不管你存不存数据都会分配一把钥匙给客户端
}))



app.use(studenter_router) //挂载student路由
app.use(teacher_router) //挂载teacher路由
app.use(register_router) //挂载teacher路由

关于session中几个参数的说明

  • secret 进行字符窜加密,更加个性化

  • saveUninitialized 为true时不管session中是否填充了数据都会给客户端分配一把钥匙,而为false时则只有在session中填充了数据之后才会分配钥匙

  • name:设置cookie中name值,默认情况是connect.sid

  • cookie:{maxAge:8000} 设置cookie和session的过期时间,8000ms之后过期

session信息保存到数据库中

  默认行为是存储在内存当中,当服务器已重启就会丢失,在实际环境中会将session进行持久化存储

session的生命周期

session与发送到客户端浏览器的生命周期是一致的。而我们在挂载session的时候,通过option选项的cookie.maxAge成员,我们可以设置session的过期时间,以ms为单位(但是,如果session存储在mongodb中的话,任何低于60s(60000ms)的设置是没有用的,下文会有详细的解释)。如果maxAge不设置,默认为null,这样的expire的时间就是浏览器的关闭时间,即每次关闭浏览器的时候,session都会失效。

var express = require('express');
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);
var app = express();

app.use(cookieParser());
app.use(session({
    secret: '12345',
    name: 'testapp',
    resave: false,
    saveUninitialized: true,
    store: new MongoStore({   //创建新的mongodb数据库
        host: 'localhost',    //数据库的地址,本机的话就是127.0.0.1,也可以是网络主机
        port: 27017,          //数据库的端口号
        db: 'test-app'        //数据库的名称。
    })
}));
// 或者基于已有的数据库连接进行
  store:new MongoStore({
      mongooseConnection: mongoose.connection, //基于已有的数据库连接进行
      ttl: 0*0*5*60 //5分钟过期
  })

参考:

Last updated