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++;
    }