首页 > 解决方案 > ASP.Net Core 2.1 API JWT 无 cookie 会话?

问题描述

有这种事吗?这可以做到吗?有基于 JWT 令牌而不是 cookie 的会话吗?Session.Ids 在每次请求时都会为我更改。有没有办法知道没有 cookie 的会话?

标签: sessionasp.net-corejwt

解决方案


HTTP 是一种无状态协议。这意味着每个请求都被唯一地对待,就好像客户端以前从未发出过请求一样。会话是一种伪造状态的方式。它们的工作方式是当服务器需要维护状态时,它会创建一个会话并通过 cookie 将该会话的 id 发送给客户端。cookie 只是一个响应标头,它指示客户端应该保留某条数据,然后在每个后续请求中将其发送回服务器。然后,客户端(Web 浏览器)执行以下操作:保存 cookie 并将 cookie 与每个请求一起发回。服务器在请求标头中接收 cookie,使用它来查找会话并“恢复”它,从而呈现状态。

重要的部分是数据,即会话ID,不一定是“cookie”。从某种意义上说,这意味着您可以用其他机制替换 cookie,只要客户端和服务器仍然来回传递会话 ID,就可以了。但是,cookieWeb 浏览器的机制。每次用户导航到不同的页面(发送请求)时,Web 浏览器世界中没有其他东西会自动将数据发送回服务器。如果这是一个涉及通用客户端的 API,而另一端的程序员决定如何格式化每个请求,那么您可以随心所欲地处理它。事实上,API 通常不会出于这个原因使用 cookie - 有完全控制请求。Web 浏览器绝对不是这种情况,因此传统网站需要 cookie 来维护状态。

JWT 在这个讨论中实际上是无关紧要的。它只是一种格式化数据的方式。它不能替代 cookie。您的 cookie 可能JWT,在许多现代 Web 应用程序中它们实际上是,但服务器仍然会发送一个Set-Cookie带有它的标头,客户端仍然将它保存在本地并连同Cookie标头一起发回。


推荐阅读