Express session expiration not work when using worker

Viewed 19

I have an express app. I'm using cluster package to run multi-thread. I want to set sessions (express-session) with 30s limit expiration, after a few seconds sessions destroy. But when I start app without worker, it works fine. Here is my app.js :


application.use(
  session({
    secret: process.env.JWT_SECRET,
    resave: true,
    saveUninitialized: false,
  })
);

require("./routes")(application);

const port = process.env.API_PORT;

const server = http.createServer(application);

const run = () => {
  if (cluster.isMaster) {
    for (var i = 0; i < numCPUs; i++) {
      cluster.fork();
    }
    cluster.on("exit", (worker, code, signal) => {
      console.error(
        `worker ${worker.process.pid} died (${
          signal || code
        }). restarting it in a sec`
      );
      setTimeout(() => cluster.fork(), 1000);
    });
  } else {
    server.listen(port, () => {
      console.log(`Server is running on ${port} ...`);
    });
  }
};

module.exports = run;

And this is my controller :

async captchaGenerator(req, res) {
    const captcha = createCaptcha(170, 45, 100, 999);
    const number = captcha.number;
    const image = new Buffer(captcha.image, "base64");

    req.session.captcha = await bcrypt.hash(number, 10);
    req.session.cookie = {
      expires: new Date(Date.now() + 30 * 1000),
      originalMaxAge: 30 * 1000,
    };

    res.writeHead(200, {
      "Content-Type": "image/png",
      "Content-Length": image.length,
    });
    res.end(image);
  }
0 Answers
Related