nodejs 如何获取express-session的所有ses

2019-12-27  本文已影响0人  有点皮的小黄皮

express-session

express-session是在node服务端建立会话(session)的中间件。会话存储的实现可使用redis、mongodb、sql serve等,具体可看官方文档http://www.expressjs.com.cn/en/resources/middleware/session.html

如何查看所有的会话信息

express-session文档里面有这么一个属性store,这个属性提供了好几个回调函数。
原文:


store说明

翻译后:


翻译后store回调函数

要获取所有的会话可通过 store.all()方法进行获取,但是官网没看到具体怎么使用store这些回调函数的。
以下是我通过查询网上一些相关资料和看nodejs返回的requist分析的。

使用案例

var express = require('express');
var path = require('path');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var multer = require('multer');
let session = require('express-session');
var helmet = require('helmet');
let RedisStore = require('connect-redis')(session);
let redisClient = require('./db/redis');

app.use(session({
    secret: 'session-abc', // 建议统一命名,尽量复杂  同一个名字,可以实现session共享
    name: 'session-abc', // 建议统一命名,尽量复杂,同一个名字,可以实现session共享
    saveUninitialized: false,
    resave: false,
    unset: 'destroy',
    maxAge: 24 * 60 * 60 * 1000,
    cookie: { maxAge: 24 * 60 * 60 * 1000 },
    store: new RedisStore({
        client: redisClient,
        ttl: 24 * 60 * 60,
        prefix: 'node-session'
    })
}));
// 获取所有已存在的session-store,req.sessionStore就相当express-session官网中的store
            req.sessionStore.all(function(err,sessions){
                if(err){
                    console.log('sessionStore-err',err)
                }
                // 过滤和当前用户id匹配的session
                sessions.filter(item =>{
                    // 匹配所有和当前用户id相同的session(不包括自身session)
                    if(item.user && item.id != req.sessionId){
                        return item.user.user === req.session.user.user
                    }else{
                        return false;
                    }
                    return item
                }).map(item =>{
                    // 去除所有和当前用户的id相同的session.user(用户信息)
                    
                    // 获取旧的session
                    req.sessionStore.get(item.id,function(err,se){
                        if(err) return console.log('sessionStore-get',err)
                        console.log('需去除重複的session',se);
                        delete se.user;
                        // 修改其他的session
                        req.sessionStore.set(se,function(error){
                            if(err) return console.log('sessionStore-set',err)
                        })
                    });
                    return item
                });
            })

如有不足,请多指教

上一篇 下一篇

猜你喜欢

热点阅读