是什么导致我的 cookie 在刷新页面时被删除?

问题描述 投票:0回答:1

我在使用 Next.js 13 作为前端、使用 Node.js 作为后端构建的 Web 应用程序中遇到 cookie 管理问题。尽管在服务器端成功设置了cookie,但Chrome在页面刷新时意外地清除了cookie。

  res.cookie('accessToken', accessTokenJWT, {
    httpOnly: true,
    secure: true, //process.env.NODE_ENV === 'production',
    signed: true,
    expires: new Date(Date.now() + oneDay),
  });

  res.cookie('refreshToken', refreshTokenJWT, {
    httpOnly: true,
    secure: true, //process.env.NODE_ENV === 'production',
    signed: true,
    expires: new Date(Date.now() + longerExp),
  });
};

采取的步骤:

  • 使用 Node.js,我为

    accessToken
    refreshToken
    设置 cookie,其特定属性包括
    Path
    Expires
    HttpOnly
    Secure
    .

  • 提供的响应标头表明已成功传输 cookie 作为 HTTP 响应的一部分。

问题:

但是,在页面刷新时,Chrome 似乎会清除这些 Cookie,从而扰乱预期的用户身份验证流程。

相关详情:

  • 浏览器:谷歌浏览器

  • 服务器配置:Node.js

  • 框架:前端的 Next.js 13

  • 请求和响应标头采用下面提供的结构化格式。

HTTP/1.1 200 OK:
  Content-Length: 29
  Content-Type: application/json; charset=utf-8
  Date: Tue, 31 Oct 2023 20:42:42 GMT
  Access-Control-Allow-Credentials: true
  Access-Control-Allow-Origin:
  ETag: W/"1d-SUDaWU/q2dcldXFBDZxiPXz37Fo"
  Set-Cookie:
    - accessToken: s%3AeyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7Im5hbWUiOiJBQkRJUklTQUsgWVVTVUYiLCJ1c2VySWQiOiI2NTM3YWMyZWUyODk2YTZiY2QzNmU4NGYiLCJyb2xlIjoiQURNSU4ifSwiaWF0IjoxNjk4Nzg0OTYyfQ.JsomTCXDe-xOo3UWUQbNjKm9DwMdmN4daVX_odrQDaY.t3m5OrryAfVzyKBpj9fapRNx2UsSGfTDcKjrDEDKbkM
      Path: /
      Expires: Wed, 01 Nov 2023 20:42:42 GMT
      HttpOnly: true
      Secure: true
    - refreshToken: s%3AeyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7Im5hbWUiOiJBQkRJUklTQUsgWVVTVUYiLCJ1c2VySWQiOiI2NTM3YWMyZWUyODk2YTZiY2QzNmU4NGYiLCJyb2xlIjoiQURNSU4ifSwicmVmcmVzaFRva2VuIjoiYTU4Y2U2Mzg3MmEwMTczNTllYWE2NzZhYTU2YTA5YzY0OTk1ODg3ZDdlMWIyY2FhZWU4M2RhNWExOWY4ZTk1Zjc3OTZhZjY4YWQwYTdhNzMiLCJpYXQiOjE2OTg3ODQ5NjJ9.XFAkKg37u2EnajwioD9M5otqsp9ovONxxOmgWyZYlk0.08FU6sNeJCvOZZxUqjU679PJ2Fh6cNe8hOBnZA4qWCA
      Max-Age: 1701376962
      Path: /
      Expires: Wed, 29 Sep 2077 17:25:24 GMT
      Secure: true
  Vary: Origin
  Strict-Transport-Security: max-age=15552000; includeSubDomains
  X-RateLimit-Limit: 60
  X-RateLimit-Remaining: 59
  X-RateLimit-Reset: 1698785283
  Cross-Origin-Opener-Policy: same-origin
  Cross-Origin-Resource-Policy: same-origin
  Origin-Agent-Cluster: ?1
  Referrer-Policy: no-referrer
  X-Content-Type-Options: nosniff
  X-DNS-Prefetch-Control: off
  X-Download-Options: noopen
  X-Frame-Options: SAMEORIGIN
  X-Permitted-Cross-Domain-Policies: none
  X-XSS-Protection: 0
  Content-Security-Policy: default-src 'self' https://jam.dev blob: i.imgur.com data:; base-uri 'self'; font-src 'self' https: data:; form-action 'self'; frame-ancestors 'self'; img-src 'self' data: https://jam.dev blob: i.imgur.com; object-src 'none'; script-src 'self' https://jam.dev blob: i.imgur.com data:; script-src-attr 'none'; style-src 'self' https: 'unsafe-inline'; upgrade-insecure-requests
  Timing-Allow-Origin: *

任何调试和解决此问题的见解、建议或解决方案将不胜感激。预先感谢您!

我尝试过的:

1. Cookie 配置: 使用 Node.js 在服务器端配置 `accessToken` 和 `refreshToken` 的 cookie。

2. 指定属性: 设置 cookie 的“Path”、“Expires”、“HttpOnly”、“Secure”等属性。

3. 验证标头:检查提供的响应标头以确保正确传输 cookie。

预期结果:

- 即使在页面刷新后,预计 cookie 仍会持续存在并存储在浏览器中。

- 预期使用“accessToken”和“refreshToken” cookie,以方便跨会话无缝进行用户身份验证。

实际结果

- 尽管服务器传输成功,但 Chrome 在页面刷新时意外地清除了 cookie。

- 由于这种意外的清除,维护用户会话的持久 cookie 的预期行为被打乱。

node.js session next.js cookies
1个回答
0
投票

我也面临着同样的问题。你解决了吗

© www.soinside.com 2019 - 2024. All rights reserved.