Session ASP.Net核心2.1 API JWT无cookie会话?

Session ASP.Net核心2.1 API JWT无cookie会话?,session,asp.net-core,jwt,Session,Asp.net Core,Jwt,有这样的事吗?这能做到吗? 是否有基于JWT令牌而非cookie的会话? 每次请求时,ID都会为我更改。 有没有办法知道没有cookie的会话?HTTP是一种无状态协议。这意味着每个请求都被唯一地处理,就好像客户端以前从未发出过请求一样。会话是假装状态的一种方式。它们的工作方式是,当服务器需要维护状态时,它会创建一个会话,并通过cookie将该会话的id发送给客户端。cookie只是一个响应头,它指示客户端应该持久化某一数据段,然后在每次后续请求时将其发送回服务器。然后,客户端(web浏览器)执

有这样的事吗?这能做到吗? 是否有基于JWT令牌而非cookie的会话? 每次请求时,ID都会为我更改。
有没有办法知道没有cookie的会话?

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

重要的部分是数据,即会话id,而不一定是“cookie”。从某种意义上说,这意味着您可以用其他机制替换cookie,只要客户机和服务器仍然来回传递会话id,您就可以了。然而,cookie是web浏览器的一种机制。在web浏览器世界中,没有其他任何东西可以在用户每次导航到不同页面(发送请求)时自动将数据发送回服务器。如果这是一个包含通用客户机的API,另一端由程序员决定如何格式化每个请求,那么您可以按照自己的意愿处理它。事实上,由于这个原因,API通常不使用cookie——通常有更好的方法来做事情,而不是在您完全控制请求时来回传递cookie。网络浏览器绝对不是这样,因此传统网站需要cookies来维护状态


JWT实际上与本次讨论无关。这只是格式化数据的一种方式。它不是饼干的替代品。您的Cookie可以是JWT,在许多现代web应用程序中,它们实际上是JWT,但服务器仍然会发送一个
Set Cookie
头,客户端仍然将其保存在本地,并将其与
Cookie
头一起发送回去。

感谢您的清理。在这种特殊情况下,我可以控制API和Angular 6客户端。问题是我没有找到任何关于如何做到这一点的文档。我的意思是,我应该将会话id发送到angular,然后从那里制作一个cookie吗?是否将其保存在本地存储中?我应该覆盖默认的HttpClient吗?似乎是低级的东西,我认为这种东西已经被比我聪明的人想到并实现了。:)你能给我指一些文档吗?一些安全方面的最佳实践,一些演示代码?谢谢,我不知道有什么特别的内容,但我肯定有一些东西。是的,您可以使用本地存储,而不是cookies。然而,我不确定的部分是将它传输回ASP.NET核心,这样它就可以理解它应该从那里提取会话id。老实说,除非你在处理GDPR(甚至可能在那时,因为会话存储在很大程度上应该是可选的),否则我只会使用Cookie的快乐路径。否则,您可能只需要深入了解源代码以了解如何继续。在你回答之后,我开始使用Postman并进行登录,我看到在登录响应中实际上我得到了一个会话cookie。session.id发生变化的原因是缺少您提到的cookie。我的问题是默认情况下angular不会在请求中存储/发回cookies。我唯一要做的事情(对于所有请求)是添加
{withCredentials:true}
,cookie进入浏览器,现在它被发送到API,会话就在那里!