如何排除路由更新快速cookie过期日期



使用express jsexpress-session,我有这个主要的经典会话中间件,它定义了cookie的maxAge到一个小时。

var express         = require('express');
var session         = require('express-session');
var RedisStore      = require('connect-redis')(session);
var ExpressServer = express();
ExpressServer.use(
    session(
        {
            secret              : 'secret',
            //  Forces session to be saved even when unmodified
            resave              : false,
            rolling             : true,
            //  Forces session to be saved even when unmodified
            saveUninitialized   : true,
            //  Controls result of unsetting req.session (through delete, setting to null)
            unset               : 'destroy',
            cookie: {
                path: '/',
                proxy: secureCookie,
                secure: secureCookie,
                httpOnly: true,
                maxAge: 1000 * 60 * 60
            },
            store: new RedisStore(
                {
                    client: RedisClient
                }
            )
        }
    )
);

然而,我有一些从客户端到服务器周期性(每30秒)调用的路由,让我们说其中一个是:

ExpressServer.get(
'/periodic',
function (req, res, next) {
    //doSomthing()
}

因为这个路由是定期从客户端调用的,我需要它不会导致cookie的过期日期更新(如果用户离开他的浏览器打开),并保留当前的过期日期(从最后一个不定期的路由调用)

我怎样才能实现它?

简单地将ExpressServer.get('/periodic')调用放在ExpressServer.use(session())调用之前。或者你可以这样做:

var url = require('url');
var normalSessionOpts = {
    secret              : 'secret',
    //  Forces session to be saved even when unmodified
    resave              : false,
    rolling             : true,
    //  Forces session to be saved even when unmodified
    saveUninitialized   : true,
    //  Controls result of unsetting req.session (through delete, setting to null)
    unset               : 'destroy',
    cookie: {
        path: '/',
        proxy: secureCookie,
        secure: secureCookie,
        httpOnly: true,
        maxAge: 1000 * 60 * 60
    },
    store: new RedisStore(
        {
            client: RedisClient
        }
    )
};
var nonRollingSessionOpts = Object.assign({}, normalSessionOpts, { rolling: false });
var normalSession = session(normalSessionOpts);
var nonRollingSession = session(nonRollingSessionOpts);
ExpressServer.use(function (req, res, next) {
    var parsedUrl = url.parse(req.url)
    return parsedUrl.pathname === '/periodic'
        ? nonRollingSession(req, res, next)
        : normalSession(req, res, next);
});

最新更新