ASP.Net Core 2.1 API JWT无cookie会话?

时间:2018-08-29 09:33:54

标签: session asp.net-core jwt

有这样的东西吗?能做到吗? 会话是否基于JWT令牌而不是基于Cookie? Session.Ids在每次请求时都会更改。 没有cookie就能知道会话吗?

1 个答案:

答案 0 :(得分:1)

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

重要的部分是数据,即会话ID,不一定是“ cookie”。从某种意义上讲,这意味着您可以用其他某种机制替换cookie,只要客户端和服务器仍然来回传递会话ID,就可以了。但是,cookies 是针对网络浏览器的机制。每次用户导航到另一个页面(发送请求)时,Web浏览器世界中都没有其他东西会自动将数据发送回服务器。如果这是一个涉及通用客户端的API,而另一端是程序员来决定如何格式化每个请求,那么您可以根据需要进行处理。实际上,由于这个原因,API通常不使用cookie-通常,有更好的方法来做事,而不是在对请求具有完全控制权时来回传递cookie。 Web浏览器绝对不是这种情况,因此传统网站需要Cookie来保持状态。

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