如何使用客户端会话时长和activeDuration使会话最长持续30天

时间:2018-08-01 15:34:15

标签: javascript node.js session

根据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天才能重新登录。如何获得这种行为?

2 个答案:

答案 0 :(得分:9)

您可以使用快速会话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

答案 1 :(得分:4)

更新3:

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


更新2:

使事情变得更清楚在我的上一次更新中,我指的是另一种连接中间件,即快速会话中间件。 用法:

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天,因此他们必须再次登录。 / p>

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

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