如何使CookieSession仅在特定路径中处于活动状态



我希望会话仅对应用程序的某些路径处于活动状态。

  1. CCD_ 1、CCD_
  2. /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 });

命中CCD_ 4使CCD_。但是多次命中/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}  }));

在下面的选项对象中,"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;...

因此,浏览器只读取该路径的cookie。换句话说,您只能在地址栏中按住路径"/cookieFolder/3"时从浏览器中读取任何cookie。

因此,我建议采取以下措施来解决您的问题,

1.让ExpressJS使用它们的默认路径选项,方法如下,

app.use(express.cookieSession({
    secret : "HELLO",
    key : "sc",
    cookie : {
        // path : "/cookieFolder/1", //Remove this line
        // httpOnly : false //Use it as Optional
    }
}));

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' });
}

3.然后,您可以访问cookie,在上面指定的路由处理程序中,如下所示

if(!!req.cookies.cookiename){
request.session.count = request.session.count || 0;
request.session.count++;
}

注意:还有一种方法,只需将路径特定的cookie设置为res.cookie('cookiename', 'cookieValue', { path: '/cookieFolder/' });,然后您就可以跳过ExpressJS路由器回调中的路径"/cookieFolder/2"。

相关内容

最新更新