【问题标题】:Express and Redis - If session exists for this user, don't allow accessExpress 和 Redis - 如果此用户存在会话,则不允许访问
【发布时间】:2015-12-28 01:00:12
【问题描述】:

我正在像这样使用 Redis 和 Express:

// app.js
var redis         = require('redis'),
    redisClient   = redis.createClient(),
    session       = require('express-session'),
    RedisStore    = require('connect-redis')(session);

session = session({
  store: new RedisStore({client: redisClient}), 
  secret: 'secretKey',
  resave: true,
  saveUninitialized: true
})

app.use(会话);

在我的索引路由文件中,我设置了这样的用户会话:

req.session.user = user;

当该用户回来(或打开另一个标签页)时,我如何检测他当前有多少会话并在他已经有一个活动会话时阻止他访问?

【问题讨论】:

    标签: node.js session express redis


    【解决方案1】:

    express-session 通过 cookie 工作。所以你有一个名为session 的cookie 和一些sessionId。浏览中的所有选项卡都共享 cookie,如果您只想通过一个浏览器选项卡严格工作,则不能依赖 cookie。

    您需要为每个打开的浏览器选项卡创建自己的会话。比如在客户端生成tabId并将{userId, tabId}保存到Redis

    或者您可以为此使用 websockets (http://socket.io/),虽然开销不大,但完全按照您的意愿行事

    【讨论】:

    • 谢谢。我理解方法。虽然它如何与 socket.io 一起工作?
    • socket.io 为每个打开的选项卡创建具有唯一 ID 的新套接字连接。因此您可以管理 id 列表并拒绝具有相同 userId 的连接
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 2015-02-05
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 2013-03-11
    相关资源
    最近更新 更多