我是网络应用程序的新手,我正在学习cookie和会话,我理解HTTP是无状态协议,使其成为有状态我们在客户端使用cookie和服务器端会话。
如果任何一个cookie与服务器端数据库,服务器匹配 显示数据,否则发送带有会话iD的set cookie(可选发送 创建会话并发送会话ID。
一个。如果服务器发送set cookie,则客户端会在所有相应的位置发送cookie 具有会话ID的请求,仅当域名与 客户端发送的服务器。
现在我的疑问是假设我正在开发一个电子商务网站。并且服务器发送添加到购物车的项目数量,直到用户没有注销,现在可以单独使用cookie来完成为什么我们需要会话?
有什么我不理解的吗?
答案 0 :(得分:1)
这些是不同的概念:
您可以看到 Cookie/Header 是位置,访问令牌/会话令牌是内容。
用户需要在您的服务中进行身份验证。这意味着您需要能够识别用户。这可以通过 JWT、会话令牌、IP 地址、签名等来完成……这与用户将数据传输到服务的方式不同。
所以当你说当用户有 cookie 时为什么我需要会话,这些是完全不相关的。会话 ID 可能会保存在 cookie 中,这只是一种选择。
cookie 中的 session id 是否对应于服务器端的实际数据是另一个完全独立的问题。会话令牌是否应该是加密(或签名)对象,例如包含用户识别信息的 JWT,或者该数据是否应该保存在服务器端数据库中,并且只传输随机字符串标识符。谁知道?
答案将取决于对您的应用程序至关重要的内容。一般来说,服务器端的会话跟踪是一个遗留概念,新的热点(现在已经老了)是为了安全起见,将 sessionId 设为 JWT 保存了一个 HTTP Only cookie。然后传递每个请求。
许多服务都内置了会话和访问令牌管理功能,有关工作示例和有关令牌的更多信息,请查看 any one of many knowledge bases。
答案 1 :(得分:0)
通常的模式是
cookie仅包含唯一的会话标识符(但本身没有有用的信息)
会话存储(服务器端)包含此会话的关联数据。这可以是a)非常大,b)对用户/浏览器隐藏,c)值得信赖(因为用户不能只在浏览器中修改它)
答案 2 :(得分:0)
最好使用会话,因为实际值是从客户端隐藏的,您可以控制数据何时到期并变为无效。如果它全部基于cookie,则用户(或黑客)可以操纵他们的cookie数据,然后向您的站点播放请求。
答案 3 :(得分:0)
由于:
是的,还有一些非常好的案例,只是在cookie中存储信息是好的和优选的,特别是因为这样可以让您更容易地将服务器扩展到服务器集群,而不必担心会话信息的存储位置。这取决于您准确存储的信息。