在 GET 请求中使用 HTTPOnly Cookie(使用 user_id cookie 从服务器检索用户信息)

way*_*oon 3 cookies node.js express angular

我正在遵循一个教程,其中在用户登录后,后端将一个 HTTPOnly cookie 发送到包含用户 ID 的前端。但是,HTTPOnly cookie 无法从前端访问(例如 document.cookie 将无法读取 cookie)。

我的问题是,如何使用此 cookie 检索用户数据?我的思考过程是,您会执行类似 GET 'server_address'/user/'id' 的操作,其中 'id' 是存储在 cookie 中的用户 ID。但这显然行不通,因为前端无法访问 cookie,因为它是 HTTPOnly。我想到的一个可能的解决方法是服务器在登录后在 JSON 响应中发送用户 ID,但如果这是解决方案,那么首先设置 cookie 的意义是什么?如果您可以在 JSON 响应中将 id 发回,那么这种解决方法使得使用 cookie 来保存用户会话似乎没有任何意义。

请耐心等待,这是我第一次使用 cookie。如果有帮助的话,我正在使用 Angular 4 前端和 Node/Express 后端

jfr*_*d00 6

Cookiehttponly存储在浏览器中,并会随着任何与 Cookie 来源匹配的未来请求自动重新发送回服务器。因此,服务器可以使用 cookie 来识别哪个客户端正在发出请求。例如,如果它是一个身份验证 cookie,可以识别谁是经过身份验证的用户,那么服务器将知道该请求来自哪个经过身份验证的用户,并且可以使用该信息来验证该请求并知道它是哪个用户。

正如您似乎已经知道的那样,浏览器 JavaScript 无法检索 httponly cookie。这就是httponly的意义。

该 cookie 如何用于检索用户数据?

Cookie 会随来自该客户端的任何请求一起发送到服务器,以便服务器可以使用 Cookie 来识别哪个用户正在发出请求。

我想到的一个可能的解决方法是服务器在登录后在 JSON 响应中发送用户 ID

如果服务器希望客户端知道用户ID,那么它应该在响应中返回它。或者,它可以停止使用 httpOnly cookie,以便客户端可以读取该 cookie。但是,通常表示任何类型的身份验证状态的 cookie 在服务器上都是加密的,因此客户端通常无法理解它们,即使它们不是 httpOnly。

如果这是解决方案,那么首先设置 cookie 的意义何在?

使用 Cookie 的原因有多种。它们允许服务器设置与该特定客户端关联的某些状态,并且来自该客户端的每个未来请求都会将该 cookie 发送回服务器,以便服务器可以访问该信息。这些信息可以是身份验证信息、用户 ID 信息、用户首选项等......

如果您可以在 JSON 响应中将 id 发回,那么这种解决方法使得使用 cookie 来保存用户会话似乎没有任何意义。

您实际上并没有告诉我们太多有关您的应用程序的信息,但 cookie 通常涉及实现登录和安全性,并且因为它们会与所有未来的请求一起自动发送,所以它们使客户端无需将凭据附加到每个未来的请求(因为 cookie 凭证会自动包含在内)。而且,对于诸如用户单击页面中的链接之类的请求,需要 cookie,因为这些类型的链接不会(也不应该)包含凭据。

我的思考过程是,你会做类似 GET 'server_address'/user/'id' 的事情

那么您计划让任何安全助理来处理该请求吗?如果是这样,那么您需要一个身份验证方案,以便不是任何人都可以请求任何用户的信息。这就是 cookie 的常用用途。您登录后,服务器将凭证设置到加密的 cookie 中。该凭证标识特定的经过身份验证的用户,以便对于来自同一客户端的未来请求,服务器可以使用该 cookie 来查看用户是谁以及他们是否经过身份验证。