美文网首页
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