如何从续订快递cookie到期日期中排除路由

时间:2016-11-03 14:06:20

标签: node.js session express cookies express-session

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的到期日期更新(如果用户离开浏览器)并且保留当前的到期日期(从最后一次没有 - 定期路线呼叫)

我怎样才能实现它?

1 个答案:

答案 0 :(得分:-1)

只需在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);
});