小编Jam*_*len的帖子

使express.js中的所有单个用户的会话无效

出于安全原因,我们希望能够使用户的所有活动会话无效,例如,如果他们更改了密码,或者只是希望能够强制注销其他会话.我们正在使用Node.js,Express,express-sessions和Redis会话存储.在我们的应用程序中,我们有(CoffeeScript):

app.use express.session
    cookie:
        maxAge: 5 * 24 * 60 * 60 * 1000 # 5 days in ms
    store: new RedisStore(client: rclient)
    key: "secret-key"
Run Code Online (Sandbox Code Playgroud)

Redis存储通过将唯一会话ID映射到您在会话中存储的任何数据来工作.例如:

# In an HTTP request
req.session.user = { _id: "user-id" }
Run Code Online (Sandbox Code Playgroud)

在Redis成为:

> get "sess:<session-id>"
'{ "user": { "_id": "user-id" } } '
Run Code Online (Sandbox Code Playgroud)

我们需要的是一种跟踪与每个用户ID相对应的所有会话的方法,这样如果我们想要使用户的会话无效,我们就可以从Redis中删除这些会话.以下警告适用:

  1. 会话在Redis中给出一个等于cookie的maxAge的TTL.每次会话的跟踪机制也应该在此时间之后到期,以避免过时的数据.
  2. 并非所有会话都必须与用户相关联.有些只是用于跟踪匿名会话详细信息.

在涉及警告(1)时,在Redis中添加另一个反向查找键(例如将user_id映射到用户的一组会话ID)的简单方法失败.

这感觉就像使用Express的其他网站必须遇到的问题一样,因为它是一种非常常见的安全模式.有没有人对如何跟踪用户会话有任何建议,然后根据需要使其无效?

谢谢!

session node.js express

3
推荐指数
1
解决办法
2538
查看次数

标签 统计

express ×1

node.js ×1

session ×1