如何根据传入的req.url将express.cookieSession设置为路径

时间:2013-10-23 21:20:33

标签: javascript node.js cookies express connect

我有一个用node.js编写的服务器。它使用护照登录用户。我也在使用express.cookieSession。

我有几个客户端,每个客户端都有自己的文件夹(假设我的应用程序的每个客户端都有几个副本服务器)。我的应用程序的每个副本都将像这样访问:

www.mysite.com/client1 / ... www.mysite.com/client2 /...

这是我的服务器代码:

app.configure(function() {
app.use(express.compress());
app.use(express.logger({format: 'dev'}));
app.use(basic.middleware);
app.use(express.cookieParser());
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.static(path.join(__dirname, 'app'), { maxAge: oneYear}));
app.use(express.cookieSession(
    {
        secret: process.env.COOKIE_SECRET || "cantbedecrypted",
        cookie: { maxAge: 1000*60*60 }
    }));
});

我的目标是根据这个“client1”或“client2”,我想保存一个会话cookie,这样当我做req.log时,它会填充那个特定的cookie。

我在req.login函数上做了这个,但问题是每次用户进入网站时,它首先在路径'/'创建一个会话cookie,并在用户登录后创建另一个会话cookie但这个在期望的路径上的时间:'/ client1 /.

这是在登录时保存会话cookie的代码:

req.session.cookie.path = '/' + clientName;

问题是当我执行req.logout()时,正在销毁的会话cookie位于默认路径:'/',因此用户仍然保持登录状态。

是否可以在创建初始会话cookie之前插入一些将检查req.url的中间件,以便它只保存在“/ client1 /而不是默认的'/'上。

我只需要一个骨架。我在app.use express.cookieSession

之后尝试了类似的东西
app.use(function (req, res, next) {
check url...
req.session.cookie.path = **desired path
}

但这不起作用。

有没有办法在express.cookieSession中使用一些参数或全局变量?这可以解决我的问题。

1 个答案:

答案 0 :(得分:0)

我认为你混淆了reqres。您不需要修改req来发送/设置Cookie,而是更改res。要重置Cookie,请使用clearCookie。你可以用它来提供路径:

res.clearCookie('name', { path: '/admin' });