session - ASP.Net Core 2.1 API JWT 无 cookie 会话?
问题描述
有这种事吗?这可以做到吗?有基于 JWT 令牌而不是 cookie 的会话吗?Session.Ids 在每次请求时都会为我更改。有没有办法知道没有 cookie 的会话?
解决方案
HTTP 是一种无状态协议。这意味着每个请求都被唯一地对待,就好像客户端以前从未发出过请求一样。会话是一种伪造状态的方式。它们的工作方式是当服务器需要维护状态时,它会创建一个会话并通过 cookie 将该会话的 id 发送给客户端。cookie 只是一个响应标头,它指示客户端应该保留某条数据,然后在每个后续请求中将其发送回服务器。然后,客户端(Web 浏览器)执行以下操作:保存 cookie 并将 cookie 与每个请求一起发回。服务器在请求标头中接收 cookie,使用它来查找会话并“恢复”它,从而呈现状态。
重要的部分是数据,即会话ID,不一定是“cookie”。从某种意义上说,这意味着您可以用其他机制替换 cookie,只要客户端和服务器仍然来回传递会话 ID,就可以了。但是,cookie是Web 浏览器的机制。每次用户导航到不同的页面(发送请求)时,Web 浏览器世界中没有其他东西会自动将数据发送回服务器。如果这是一个涉及通用客户端的 API,而另一端的程序员决定如何格式化每个请求,那么您可以随心所欲地处理它。事实上,API 通常不会出于这个原因使用 cookie - 有完全控制请求。Web 浏览器绝对不是这种情况,因此传统网站需要 cookie 来维护状态。
JWT 在这个讨论中实际上是无关紧要的。它只是一种格式化数据的方式。它不能替代 cookie。您的 cookie 可能是JWT,在许多现代 Web 应用程序中它们实际上是,但服务器仍然会发送一个Set-Cookie
带有它的标头,客户端仍然将它保存在本地并连同Cookie
标头一起发回。
推荐阅读
- python-3.x - 我正在使用 Trio,如何获取已经打开的套接字的 IP 地址?
- sip - 为什么 VoIP 网关不发送任何媒体并中断通话?
- windows - 使用 PS/CMD 查找活动适配器并设置静态 IP
- java - 迭代嵌套列表(任何深度)
- mongodb - 如何根据不同的 ID 在 MongoDB 中组合两个集合?
- php - 使用 `$and` 和 `$or` 条件过滤器从 PHP 查询 MongoDB
- swift - xcode 文件自动更改 - Swift
- python - 在 pyqt5 应用程序的任务栏中设置与应用程序图标相同的图标
- android - Gradle 7 和 jitpack.io 在发布期间遇到错误
- laravel - 在事务块中运行查询时出现错误“无法使用 Illuminate\Database\MySqlConnection 类型的对象作为数组”