1.安装

2.导入session中间件

const session=require("express-session")

3. 设置中间件

说明:

  1. 设置了session的名称为"sid",这是cookie的名称,默认值是connect.id。
  2. 设置了一个密钥"forever",用于对session数据进行加密和签名。
  3. 设置了两个选项:saveUninitialized和resave。saveUninitialized表示是否每次请求自动创建cookie用来存储session的id,默认值为false;resave表示是否在每次请求时重新保存session,默认值为true。这里设置为true,表示每次请求都会重新保存session。
  4. 使用了MongoStore作为session存储方式,将session数据存储到MongoDB数据库中。需要提供一个mongoUrl参数,指定数据库的连接配置。
  5. 设置了cookie的一些属性,如httpOnly表示开启后前端无法通过JS操作获取cookie,maxAge表示控制sessionID的过期时间,这里设置为5分钟。
app.use(session({
    name:"sid",   //设置cookie的name,默认值是connect.id
    secret:"forever",   //参与加密的字符串(又称签名)
    saveUninitialized:false, //是否每次请求自动创建cookie用来存储session的id
    resave:true, //是否在每次请求时重新保存session  20分钟,40分钟
    store:MongoStore.create({
        mongoUrl:'mongodb://127.0.0.1:27017/project' //数据库的连接配置
    }),
    cookie:{
        httpOnly:true, //开启后前端无法通过JS操作获取cookie
        maxAge:1000*60*5 //这一条是控制sessionID的过期时间
    } 
})) 

 4.session的读取

app.get("/cart",(req,res)=>{
    //访问session对象,从而存储用户的关键信息
    //检测session是否存在用户数据
    if(req.session.username){
       res.send("欢迎来到购物车页面")
    }else{
        res.send("你还没有登录")
    }
})

5.session的销毁

app.get("/logout",(req,res)=>{
    req.session.destroy(()=>{
        res.send("退出成功")
    })
})

6.源码展示

const express=require("express")
//导入session中间件
const session=require("express-session")

const MongoStore=require("connect-mongo")

const app=express()

//设置中间件
app.use(session({
    name:"sid",   //设置cookie的name,默认值是connect.id
    secret:"forever",   //参与加密的字符串(又称签名)
    saveUninitialized:false, //是否每次请求自动创建cookie用来存储session的id
    resave:true, //是否在每次请求时重新保存session  20分钟,40分钟
    store:MongoStore.create({
        mongoUrl:'mongodb://127.0.0.1:27017/project' //数据库的连接配置
    }),
    cookie:{
        httpOnly:true, //开启后前端无法通过JS操作获取cookie
        maxAge:1000*60*5 //这一条是控制sessionID的过期时间
    } 
})) 
//首页路由
app.get("/",(req,res)=>{
    res.send("home")
})
//登录
app.get("/login",(req,res)=>{
    // 传入username=admin&password=admin
    if(req.query.username==='admin' && req.query.password==='admin'){
        //设置session信息
        req.session.username='admin'
        req.session.sid='258aefccc'
        // 成功响应
        res.send("success")
    }else{
        res.send("fail")
    }
   
})
//session的读取
app.get("/cart",(req,res)=>{
    //访问session对象,从而存储用户的关键信息
    //检测session是否存在用户数据
    if(req.session.username){
       res.send("欢迎来到购物车页面")
    }else{
        res.send("你还没有登录")
    }
})

//session的销毁
app.get("/logout",(req,res)=>{
    req.session.destroy(()=>{
        res.send("退出成功")
    })
})

app.listen(3000,()=>{
    console.log("服务启动成功");
})
07-10 11:02