【问题标题】:i can not set server side cookie in http post request in expressjs我无法在 expressjs 的 http post 请求中设置服务器端 cookie
【发布时间】:2020-06-24 15:31:27
【问题描述】:

当我在 expressjs 中发出 http post 请求时,我试图在服务器上设置 cookie,但是当我发出 http get 请求时,cookie 正在设置。我不知道可能是什么原因。以下是我的代码:

app.post('/tou', function(req, res) {
  res.setHeader('Cache-Control', 'private');
  res.cookie('__pal', 'locked', { httpOnly: false, path: '/', secure: false, expire: 6 * 60 * 60 * 1000 })
  res.send('done')
})

【问题讨论】:

  • 您确定它是在您发出 GET 请求时设置,还是在您发出 POST 请求时被设置然后从浏览器发回 以后的 GET 请求中的服务器?
  • 当我发出 GET 请求时正在设置
  • 如果是,那代码不是原因。
  • 我使用了与您完全相同的代码,它对 POST 请求有效!这就是我从客户端发出请求的方式; var xhr = new XMLHttpRequest(); xhr.open("POST", '/tou', true); xhr.onreadystatechange = function() { // Call a function when the state changes. if (this.readyState === XMLHttpRequest.DONE && this.status === 200) { console.log('succssss') } } xhr.send("foo");得到回复:Set-Cookie: __pal=locked; Path=/
  • 请问你是如何在 expressjs 中设置来自服务器的 cookie

标签: javascript node.js express cookies


【解决方案1】:

我也有类似的问题。据我所知,您无法在 POST 请求上创建 cookie,但是当您执行 GET 请求时,将创建 cookie。您应该在浏览器上使用简单的GET 方法尝试此操作,并检查是否创建了 cookie。如果是这样,我认为您可能需要想办法在您的 POST 请求完成后进行获取请求。

  app.get('/setuser', (req, res)=>{ 
    res.setHeader('Set-Cookie', cookie.serialize('name', "value", {
      httpOnly: false
    }));
  res.send('user data added to cookie'); 
  }); 

我还想补充一点,如果您使用 Postman/REST Client/Curl 进行测试,您会看到 cookie,但不会设置它,因此我建议您在浏览器上进行测试。

(如果你有什么想法请告诉我)

编辑#1

我发现您可以使用 res.redirect 调用 GET 路由,然后以这种方式设置您的 cookie。

【讨论】:

  • cookie 没有设置,因为我没有添加凭据:cors 中间件设置选项为真
【解决方案2】:

尝试使用'cookie' 模块(npm i cookie)。

res.setHeader('Set-Cookie', cookie.serialize('__pal', 'locked', {
  httpOnly: false,
  sameSite: true,
  path: "/",
  maxAge: 60 * 60 * 6 * 1000
}))

【讨论】:

  • 为什么会有不同?
猜你喜欢
  • 2017-03-10
  • 1970-01-01
  • 2016-01-10
  • 1970-01-01
  • 2011-06-01
  • 2013-07-19
  • 2017-01-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多