美文网首页
nodejs 如何获取express-session的所有ses

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

作者: 有点皮的小黄皮 | 来源:发表于2019-12-27 02:07 被阅读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分析的。

    使用案例

    • 建立会话
      我只粘贴了部分代码,我使用的是redis来作为会话数据(session)的存储。
    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、修改其他session
      以下,我是做同一个用户只能一个人登录,新登录的会把旧登录的给挤掉。store. set()
      方法并不能修改其他用户的信息,仅修改的是store里面这个session的值。如果要修改其他的信息,可直接修改redis里面的值
    // 获取所有已存在的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
                    });
                })
    

    如有不足,请多指教

    相关文章

      网友评论

          本文标题:nodejs 如何获取express-session的所有ses

          本文链接:https://www.haomeiwen.com/subject/itjroctx.html