javascript - 如何使用客户端 session 持续时间和 activeDuration 使 session 持续最多 30 天

标签 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
}));

我希望我的用户 session 最多持续 30 天。如果我将 duration 设置为 30 天,将 activeDuration 设置为 30 天,我认为我将以 60 天的长 session 结束。

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

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

最佳答案

您可以使用 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

关于javascript - 如何使用客户端 session 持续时间和 activeDuration 使 session 持续最多 30 天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51637252/

相关文章:

javascript - Highcharts 实体量表 : How can I disable gradient fill?

php - 加密 Ajax 数据的最佳且最安全的方法是什么?

javascript - 通过 animationName 检测触发了哪个 AnimationEnd

node.js - 需要 Mongoose.js 上的几个列之一

node.js - 当文件中有更新时,如何从nodejs中的fs.watch获取更新的数据

java - 除了 session 之外,在 Spring MVC 应用程序中保存数据的任何其他选项

session - meteor js : make Session object partially persistent

javascript - Ubuntu 9 上的 Node.js + SCP + stdin.write

javascript - 为什么许多 javascript 示例仍然使用 'var' 而不是 'const' 和 'let' ?

php - 什么样的序列化使用PHP函数session_set_save_handler的write函数?