express中使用session

express中使用session

利用express-session中间件,可以使用session来缓存信息

第一步:安装中间件;npm install express-session --save
第二步:引入中间件;const session = require("express-session")
第三步:使用中间件;

app.set('trust proxy', 1) // trust first proxy
app.use(session({
    secret: 'server-session',    // 服务器生成session的签名 自定义
    name: 'sessionToCookieName', // 设置session对应cookie的名称
    resave: false,               // 强制保存session,即使他没有变化,必须配置,否则会有警告
    saveUninitialized: true,     // 强制将未初始化的session存储,必须配置,否则会有警告
    rolling: true,               // 在每次请求时强行设置cookie,这将重置cookie过期时间(默认:false)
    cookie: {                    // cookie 配置与cookie-parser的配置一致
        maxAge: 1000 * 60,
        secure: false,
    },
}))

session的增删改查

新增、编辑、查询

// 新增和编辑
app.get('/login', (req, res) => {
    req.session.username = '张三'
    res.send('登录')
})

// 查询
app.get('/', (req, res) => {
    var username = req.session.username
    if(!username) {
        res.send('session没有缓存用户姓名的信息')
    } else {
        res.send('用户姓名为:' + username)
    }
})

删除

  • 第一种方式,设置cookiemaxAge0
// 它会把所有的session都销毁 一般不用
app.get('/loginout', (req, res) => {
    req.session.cookie.maxAge = 0
})
  • 第二种方式,销毁指定session
// 指定session中具体的key值进行销毁
app.get('/loginout', (req, res) => {
    req.session.username = null
})
  • 第三种方式,调用destroy方法
// 会清空所有的session
req.session.destroy((err) => {
    if(err) {
        console.log(err)
        return
    }
    res.send('退出登录, session清空成功')
})

session的分布式存储(存储到数据库)

利用connect-mongo中间件,可以将session存储到数据库中

  • 第一步:安装中间件;npm install connect-mongo --save
  • 第二步:使用中间件;const MongoStore = require("connect-mongo")(session)
  • 第三步:在session中配置store属性
// connect-mongo中间件需要在session的基础上进行配置
const mongoUrl = 'mongodb://localhost:27017/shop'
app.set('trust proxy', 1) // trust first proxy
app.use(session({
    secret: 'server-session',    // 服务器生成session的签名 自定义
    name: 'sessionToCookieName', // 设置session对应cookie的名称
    resave: false,               // 强制保存session,即使他没有变化,必须配置,否则会有警告
    saveUninitialized: true,     // 强制将未初始化的session存储,必须配置,否则会有警告
    rolling: true,               // 在每次请求时强行设置cookie,这将重置cookie过期时间(默认:false)
    cookie: {                    // cookie 配置与cookie-parser的配置一致
        maxAge: 1000 * 60,
        secure: false,
    },
    store: MongoStore.create({
        mongoUrl: mongoUrl       // session存储的数据库地址
        touchAfter: 24 * 3600,   // 不管发出了多少请求 在24小时内只更新一次session 除非改变session的值
    })
}))

connect-mongo会默认在数据库中创建一个sessionscollections
并向其中添加一条数据,记录存储的session的字段

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值