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

Gle*_*rce 7 javascript session node.js

根据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
}));
Run Code Online (Sandbox Code Playgroud)

我希望用户的会话最多有效30天.如果我设置duration为30天activeDuration到30天,我想我最终会有60天的会话.

如果我设置duration为15天activeDuration到15天,登录的用户不会在15天内完成任何操作(不是我希望那种用户行为,但我的假设是正确的吗?)

我想要的只是每次用户访问网站以获得30天才需要重新登录.我该如何获得这种行为?

Har*_*tel 10

您可以使用快速会话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!')
  }
})
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅此链

NPM包


adm*_*dev 4

更新3:

我正在考虑使用原始配置的更简单的方法。尝试设置duration为一天和activeDuration30。或者出于测试目的,设置duration为 1 分钟和activeDuration5 分钟,并在第一分钟内登录并使用该网站,然后在 3 分钟内再次登录并使用该网站。看看这是否有效。


更新2:

为了使事情更清楚在我的上次更新中,我指的是一个不同的连接中间件:快速会话中间件。用法:

npm install express-session
Run Code Online (Sandbox Code Playgroud)

然后:

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();
});
Run Code Online (Sandbox Code Playgroud)

了解更多信息:

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 天。因此,这意味着如果用户保持活动状态,会话就永远不会过期。