Node.js 如何使CookieSession仅在某些路径中处于活动状态?
我希望会话仅对应用程序的某些路径处于活动状态Node.js 如何使CookieSession仅在某些路径中处于活动状态?,node.js,session,express,Node.js,Session,Express,我希望会话仅对应用程序的某些路径处于活动状态 /cookieFolder/1,/cookieFolder/3及其所有子路径都应该可以访问会话 /cookieFolder/2及其所有子路径都不应访问会话 目前我有以下代码: app.use(express.cookieParser()); app.use(express.cookieSession({secret:"HELLO", key:"sc", cookie:{path:"/cookieFolder/1", httpOnly:false}
/cookieFolder/1
,/cookieFolder/3
及其所有子路径都应该可以访问会话/cookieFolder/2
及其所有子路径都不应访问会话app.use(express.cookieParser());
app.use(express.cookieSession({secret:"HELLO", key:"sc", cookie:{path:"/cookieFolder/1", httpOnly:false} }));
app.use(express.cookieSession({secret:"HELLO", key:"sc", cookie:{path:"/cookieFolder/3", httpOnly:false} }));
....
app.get('/', routes.index);
app.get('/cookieFolder', routes.index);
app.get('/cookieFolder/1', routes.index);
app.get('/cookieFolder/2', routes.index);
app.get('/cookieFolder/3', routes.index);
路线索引
if(req.session.count){
req.session.count = req.session.count + 1;
}else{
req.session.count = 1;
}
res.render('index', { title: req.session.count });
点击
/cookieFolder/3
会增加req.session.count
。但是多次点击/cookieFolder/1
,count会话变量将永远保持在1
中。您必须稍微更改方法。在下一行中,您将完全覆盖这些选项
app.use(express.cookieSession({secret:"HELLO", key:"sc", cookie:{path:"/cookieFolder/1", httpOnly:false} }));
app.use(express.cookieSession({secret:"HELLO", key:"sc", cookie:{path:"/cookieFolder/3", httpOnly:false} }));
在下面的options对象中,针对“path”键的值告诉ExpressJS将任何会话设置为指定的路径
{
secret : "HELLO",
key : "sc",
cookie : {
path : "/cookieFolder/3", //All cookies set in this path only
httpOnly : false
}
}
具体来说,由于指定了显式路径,ExpressJS将设置cookie头如下所示
set-cookie: sc=<somesessionid>; path=/cookieFolder/3;...
2.按如下方式设置cookie,通过这样做,我们可以强制浏览器将cookie作为请求头的一部分发送回,并且仅使用特定路径。因此,您可以检查服务器端的cookie是否可用
if(/*<some condition 1>*/){
res.cookie('cookiename1', 'cookieValue1', { path: '/cookieFolder/1' });
}
if(/*<some condition 2>*/){
res.cookie('cookiename3', 'cookieValue3', { path: '/cookieFolder/3' });
}
注意:还有一种方法,只需将路径特定的cookie设置为
res.cookie('cookiename','cookieValue',{path:'/cookieFolder/')代码>之后,您可以跳过ExpressJS路由器回调中的路径“/cookieFolder/2”。我应该在步骤2中的何处放置代码(按如下所示设置cookie)。这是干什么用的?我无法理解第2步的用法。你能解释一下吗?@rajKamal,我在第二步编辑了我的答案。您可以在应用程序中的任何位置放置代码。您必须确保res对象(响应对象)的可用性。这个地方也可以是你的路由器处理器。
if(/*<some condition 1>*/){
res.cookie('cookiename1', 'cookieValue1', { path: '/cookieFolder/1' });
}
if(/*<some condition 2>*/){
res.cookie('cookiename3', 'cookieValue3', { path: '/cookieFolder/3' });
}
if(!!req.cookies.cookiename){
request.session.count = request.session.count || 0;
request.session.count++;
}