【问题标题】:How to make session last maximum of 30 days using client-sessions duration and activeDuration如何使用客户端会话持续时间和 activeDuration 使会话持续最多 30 天
【发布时间】:2019-01-09 06:13:13
【问题描述】:

根据https://github.com/mozilla/node-client-sessions#usage

var sessions = require("client-sessions");
app.use(sessions({
  cookieName: 'mySession', // cookie name dictates the key name added to the request object
  secret: 'blargadeeblargblarg', // should be a large unguessable string
  duration: 24 * 60 * 60 * 1000, // how long the session will stay valid in ms
  activeDuration: 1000 * 60 * 5 // if expiresIn < activeDuration, the session will be extended by activeDuration milliseconds
}));

我希望我的用户会话最多保持活跃 30 天。如果我将duration 设置为 30 天,activeDuration 设置为 30 天,我想我最终会得到 60 天的会话。

如果我将duration 设置为 15 天,activeDuration 设置为 15 天,那么登录然后什么都不做的用户不会在 15 天内注销(不是我期望那种用户行为,但我的假设正确吗?)

我想要的是每次用户访问该网站时,他们需要在 30 天之前重新登录。我如何获得这种行为?

【问题讨论】:

    标签: javascript node.js session


    【解决方案1】:

    您可以使用 express-session NPM 来实现您的功能:

    这里是代码和参考链接:

    代码:

    let session = require('express-session')
    let time = new Date(Date.now() + (30 * 86400 * 1000))
    let app = express()
    let sess = {
      secret: 'keyboard_cat',
      cookie: { maxAge: time }
    }
    
    if (app.get('env') === 'production') {
      app.set('trust proxy', 1) // trust first proxy
      sess.cookie.secure = true // serve secure cookies
    }
    
    app.use(session(sess))
    
    app.use(session({
      genid: function(req) {
        return genuuid() // use UUIDs for session IDs
      },
      secret: 'keyboard cat'
    }))
    
    //call your route and do session things here
    app.get('/', function(req, res, next) {
      if (req.session.views) {
        req.session.views++
        res.setHeader('Content-Type', 'text/html')
        res.write('<p>views: ' + req.session.views + '</p>')
        res.write('<p>expires in: ' + (req.session.cookie.maxAge / 1000) + 's</p>')
        res.end()
      } else {
        req.session.views = 1
        res.end('welcome to the session demo. refresh!')
      }
    })
    

    更多信息请参考以下链接:

    NPM package

    example

    【讨论】:

      【解决方案2】:

      更新 3:

      我正在考虑使用您的原始配置更简单的方法。尝试将duration 设置为一天,activeDuration 设置为 30。或者出于测试目的,将duration 设置为 1 分钟,activeDuration 设置为 5 分钟,然后在第一分钟内登录并使用该站点,然后再次登录3分钟。看看这是否可行。


      更新 2:

      为了让事情更清楚,在我上次的更新中,我指的是一个不同的连接中间件,即 express-session 中间件。 用法:

      npm install express-session
      

      然后:

      var session = require('express-session')
      app.use(sessions({
      secret: 'blargadeeblargblarg',
      cookie: {expires = new Date(Date.now() + (30 * 86400 * 1000))}  
      }));
      
      app.use(function(req, res, next) {
        // Here you implement a function to load the session if it's valid
        // you check whether the req.session.cookie.expires is < now and if it is
        // you call req.session.reload(callback function after reloading has completed)
        next();
      });
      

      更多信息:

      https://github.com/expressjs/session

      更新:

      基本上,您要求的是类似于超时的东西。删除 durationactiveDuration 并改用它:expires: new Date(Date.now() + (30 * 86400 * 1000)) 这意味着一旦用户登录,每次他们使用您的网站时,他们的会话都会从上次访问时间开始更新 30 天。


      如果您需要用户在 30 天后登录,那么我会将 activeDuration 设置为 0。这样,即使用户处于活动状态并且他们必须再次登录,会话也永远不会延长超过 30 天。

      activeDuration 是会话到期前的一段时间,如果用户处于活动状态,会话将延长该持续时间。

      例如: 您将持续时间设置为 30 天,将 activeDuration 设置为 5 天。假设用户在会话结束前 4 天变得活跃。这样他们就可以在原来的 30 天之外再获得 5 天。说在额外的 5 天内再次变得活跃。然后他们在现在的 35 天之外再获得 5 天。因此,这意味着如果用户保持活动状态,则会话永远不会过期。

      【讨论】:

      • 我从不希望用户的持续时间 > 30 天。如果用户在 30 天内一直处于活动状态,我绝不希望用户需要重新登录。
      • 我不清楚你的意思。如果用户正在积极使用网站,30 天后,您想让他再次登录还是让他继续使用网站而无需再次登录?例如,假设我登录到您的网站并且每天都使用它。 30天后我再次尝试使用它会发生什么?
      • 我希望每 31 天与我们的网站交互一次的用户每次都重新登录。每 30 天才与我们的网站互动的用户永远不需要重新登录。
      • 基本上你要求类似超时的东西。删除 durationactiveDuration 并改用:expires: new Date(Date.now() + (30 * 86400 * 1000)) 这意味着一旦用户登录,每次他们使用您的网站时,他们的会话都会从上次访问时间起 30 天更新。
      • 把它放在你的答案中,你就赢得了赏金。谢谢你:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-06
      • 1970-01-01
      • 2017-06-20
      • 2012-03-02
      • 2013-10-17
      • 2010-12-03
      相关资源
      最近更新 更多