【问题标题】:How to check session data in nodejs如何在nodejs中检查会话数据
【发布时间】:2019-01-11 04:59:14
【问题描述】:

我在我的项目中使用 express-session 它工作正常,如果用户登录到我的网站意味着我将他们的数据存储在会话中并且在注销后销毁会话,那也可以正常工作,如果用户运行特定的 url 注销后意味着这将无需登录即可将用户带到该页面,需要限制该页面,下面是我尝试过的代码

  app.use((req,res,next)=>{
  if(!req.session.data)
  {
      return res.redirect("/"); or res.redirect("/"); //Both not working
  }
  next();
  })

这显示了以下错误

Error: Can't set headers after they are sent.
    at validateHeader (_http_outgoing.js:491:11)
    at ServerResponse.setHeader (_http_outgoing.js:498:3)
    at ServerResponse.header (/home/djaxtech/Documents/luka-asset/node-app/node_modules/express/lib/response.js:767:10)
    at ServerResponse.send (/home/djaxtech/Documents/luka-asset/node-app/node_modules/express/lib/response.js:170:12)
    at done (/home/djaxtech/Documents/luka-asset/node-app/node_modules/express/lib/response.js:1004:10)
    at tryHandleCache (/home/djaxtech/Documents/luka-asset/node-app/node_modules/ejs/lib/ejs.js:257:5)

任何帮助表示赞赏..!

【问题讨论】:

  • 在这部分之前的某个地方,您已经将某物发送到标题,如“发送后无法设置标题”。因此,在调用这部分之前,如果不知道脚本是什么样子,就很难判断。
  • 我只是使用简单的脚本,如果用户在浏览器中运行每个 url,我需要检查会话中的用户是否?所以我正在使用 app.use 中间件,如果用户不在会话中意味着我会将用户重定向到索引页面,该代码是 app.get("/",(req,res)=>{ res.render("index") });

标签: node.js express-session


【解决方案1】:

请试试这个

app.use((req,res,next)=>{
  if(!req.session.data)
  {
      return res.redirect("/"); or res.redirect("/"); //Both not working
  } else {
    next();
  }
})

【讨论】:

    【解决方案2】:

    下面的代码是一个中间件:

    Using middleware

    What does middleware and app.use actually mean in Expressjs?

    这意味着当调用next() 时,该行中将执行另一个函数。你也必须从那里发出响应。

    在下面,错误意味着,响应已经发送,您正在尝试再次发送,这是不可能的。

    Error: Can't set headers after they are sent.
    
    app.use((req, res, next) => {
        if (!req.session.data) {
            // return res.redirect("/"); or res.redirect("/"); //use only one.
        }
        next();
    })
    

    使用会话

    req.session 要存储或访问会话数据,只需使用请求属性 req.session,它(通常)由存储序列化为 JSON,因此嵌套对象通常很好。例如下面是一个用户特定的视图计数器:

    // Use the session middleware
    app.use(session({ secret: 'keyboard cat', cookie: { maxAge: 60000 }}))
    
    // Access the session as req.session
    app.get('/', function(req, res, next) {
      if (req.session.views) {
        req.session.views++
        res.setHeader('Content-Type', 'text/html')
        res.write('<p>views: ' + req.session.views + '</p>')
        res.write('<p>expires in: ' + (req.session.cookie.maxAge / 1000) + 's</p>')
        res.end()
      } else {
        req.session.views = 1
        res.end('welcome to the session demo. refresh!')
      }
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-26
      相关资源
      最近更新 更多