Answers:
Cookies:在其早期版本中,具有唯一客户端的文本文件会标识与该客户端有关的所有其他信息(例如角色)
Cookies是key-value
最初用于保存与客户活动有关的数据的元组。我们将这种保留称为会话或应用程序状态。从根本上讲,它们是为保持Web应用程序状态而设计的。更具体地说,是客户端的状态。(1)
Cookie通常由服务器通过响应标头(Set-Cookie key=value
)设置。但是,它们也可以由客户端设置。例如,通过DOM(document.cookie
)。
关于Cookie的重要一件事是它们无法识别用户。他们宁愿关联Terna 数据-客户端-服务器/路径。(3)
我们通常将Cookie与文件相关联,因为在Web浏览器的早期,他们必须以某种方式保留cookie,这是文件最可行的支持。当今的浏览器(除其他外)将cookie存储在本地存储(嵌入式DB)中。
会话:只有唯一的客户端ID在文件中发送(也称为Cookie),其他所有内容都存储在服务器上。
就会话而言,我想您的意思是服务器会话。正如我所评论的,会话也可以在客户端实现。客户端会话的区别在于数据存储在服务器端的某个位置。(2)在这种情况下,我们得到的是会话ID;然后以Cookie的形式获取 没有会话ID,服务器将无法将传入请求与客户端的先前活动相关联。(3)例如,经过身份验证的用户,购物车等。
无论如何,会话ID不一定标识用户。它将特定的应用程序状态与Web客户端关联。会话可能包含或可能不包含用户数据。
在分布式应用中,出于明显的原因,会话应可序列化。如果它们存储在内存中,则内存存储(组件)应可序列化。常见的解决方案是将会话存储在文件中。或像Redis这样的NoSQL DB。
关于安全性。服务器端会话比客户端安全。客户通常更容易受到威胁的威胁,因为用户通常不知道他们所面临的威胁太多。至少不是普通用户。
另一方面,攻击服务器端基础架构并非易事。
JWT:所有内容都存储在令牌中(也可以存储在文本文件中,也称为Cookie)
并不是的。JWT存储主要与令牌的授权和发行者有关的数据。
尽管它们用来包含用户ID(子),但我们发现JWT无法识别经过身份验证的用户。例如,来宾会话的令牌。JWT的主要内容是索赔 ; 授权流程要检查的项目。
请记住,JWT不是全局存储,这一点很重要。该会话或应用程序状态仍有待存储的地方,并独立管理。
关于JWT,尽管它们也可以存储在本地存储中,但它们通常存储为cookie。此外,OWASP社区认为sessionStorage对于Web浏览器来说更安全。但是,这取决于浏览器的版本。
1:万维网注定是无状态的。如果我们要构建无状态服务器端应用程序,则会话应存储在客户端的某个位置。
2:将服务器端应用程序转换为有状态应用程序。
3:客户端作为应用程序,而不是用户。
Cookies:在其早期版本中,具有唯一客户端的文本文件会标识与该客户端有关的所有其他信息(例如角色)
您对cookie的定义并不能真正描述它们的作用。Cookie是Set-Cookie
由服务器通过HTTP响应标头()设置并由支持它们的客户端存储的键值对。Cookie随每个后续请求(在Cookie
标头中)一起发送回去,以获取与方案,主机,路径,https匹配的请求,而cookie尚未过期。您可以将所需的任何内容存储在cookie中,它允许您支持HTTP无状态协议上的状态。
Cookie交换示例如下所示:
会话:只有唯一的客户端ID在文件中发送(也称为Cookie),其他所有内容都存储在服务器上
没错。会话是在服务器端存储的有关用户当前会话的数据。为了使此功能以HTTP之类的无状态协议运行,用户必须随每个请求发送其会话ID,以便服务器可以为用户获取正确的会话。会话ID通常存储在Cookie中(请参见上文)。这与任何其他cookie都不一样,它只是用户会话的服务器ID。
JWT:所有内容都存储在令牌中(也可以存储在文本文件中,也称为Cookie)
那是真的。一切都存储在令牌中。令牌可以存储在cookie中(请参见上文)。这是服务器会话的替代方法,并且可以工作,因为令牌是由服务器签名和验证的,因此不能更改或伪造令牌,并且可以安全地存储在客户端。
user_id
已登录用户的内容。