我正在使用express
v4.18.2、express-session
v117.3和connect-redis
v6.1.3在redis中创建会话存储。下面是处理express会话的中间件--
var express = require("express"); const session = require("express-session"); const bodyParser = require("body-parser"); const RedisStore = require("connect-redis")(session); const Redis = require("ioredis"); var indexRouter = require("./routes/index"); var usersRouter = require("./routes/users"); var app = express(); const redisClient = new Redis({ port: 15379, host: "localhost", }); // Middleware for handling sessions with Redis app.use( session({ store: new RedisStore({ client: redisClient, ttl: 30, // 1 day }), touchAfter: 30, name: "sid", secret: "HASJASJ", resave: false, saveUninitialized: false, rolling: false, disableTouch: true, cookie: { httpOnly: true, maxAge: 1000 * 30, // 1 day sameSite: "lax", // secure: true, }, }) ); // Middlware for parsing request body and form data app.use(bodyParser.json()); app.use("/", indexRouter); app.use("/users", usersRouter); // error handler app.use(function(err, req, res, next) { // set locals, only providing error in development res.locals.message = err.message; res.locals.error = req.app.get("env") === "development" ? err : {}; // render the error page res.status(err.status || 500); res.render("error"); }); module.exports = app;
登录到我的应用程序后,我注意到在每个后续请求中,Redis存储中登录会话的TTL都会重置为原始的maxAge。我甚至按照文档中的描述添加了disableTouch: true
,但每当我的应用程序到达其他路径(例如/users)时,TTL仍会继续重置。
var express = require("express"); var router = express.Router(); /* Login page */ router.post("/", function(req, res, next) { req.session.user = { email: req.body.email, pass: req.body.password }; res.status(200).json({ status: "session user data stored in redis /" }); }); module.exports = router;
var express = require("express"); var router = express.Router(); /* GET users listing. */ router.get("/", function(req, res, next) { res.status(200).json({ status: "user ok /" }); }); module.exports = router;
我查找了Github问题和线程,但没有找到其他解决方案。对此有什么建议吗?我在这里做错什么了吗?