NodeJS 无法从同级和父路径访问Cookie

b5lpy0ml  于 2023-06-05  发布在  Node.js
关注(0)|答案(2)|浏览(234)

我试图从这个路由localhost:3000/cart/add-to-cart设置但是cookie不会发送给域上的任何其他兄弟或父路径。
我使用Express,这是我设置cookie的代码(非常简单)

if (!req.cookies.uniqueId) {
    uniqueId = uuidv4();
    res.cookie("uniqueId", uniqueId, {
      httpOnly: true,
      maxAge: 86400000,
      sameSite : "none",
      secure : true
    });
  } else {
    uniqueId = req.cookies.uniqueId;
  }

但是当我试图访问cookie时,正如我提到的,我不能。
我尝试从localhost:3000/或localhost:3000/cart访问它我已经尝试了很多东西,设置路径:“/”等等。
它适用于Postman,但不适用于Firefox。

kupeojn6

kupeojn61#

如果您遇到cookie未被发送到域上的同级或父路径的问题,您可以尝试以下几个潜在原因和解决方案。
SameSite属性:sameSite属性控制何时应随跨站点请求发送Cookie。在您的代码中,您将其设置为“none”,这意味着该cookie应与跨站点和同一站点请求一起发送。但是,要使sameSite属性使用“none”值,secure属性也必须设置为true。既然你提到它可以在Postman上工作,但不能在Firefox上工作,值得注意的是,从Firefox 86开始,浏览器强制cookie的Secure属性为sameSite=none。因此,为了确保与Firefox的兼容性,请确保在开发过程中使用HTTPS(安全连接),而不是HTTP。
路径属性:path属性定义cookie的范围,并限制域中哪些路径可以访问cookie。默认情况下,路径设置为当前路径。由于您希望cookie可从多个路径访问,因此应将path属性设置为'/',以使其可用于域中的所有路径。下面是你的代码的更新版本,其中path属性显式设置为'/':

if (!req.cookies.uniqueId) {
  uniqueId = uuidv4();
  res.cookie("uniqueId", uniqueId, {
    httpOnly: true,
    maxAge: 86400000,
    sameSite: "none",
    secure: true,
    path: "/"
  });
} else {
  uniqueId = req.cookies.uniqueId;
}

通过将path属性设置为“/”,可以从localhost:3000/和localhost:3000/cart访问cookie。
请记住,在开发过程中确保您有一个安全的连接(HTTPS),以测试Firefox中的cookie。

wnvonmuf

wnvonmuf2#

我已经找到解决办法了
该cookie在购物车页面上不可用,因为我使用
https://localhost:8080/cart
而不是
https://127.0.0.1:8080/cart

相关问题