当我们已经有cookie时,为什么我们需要会话?

时间:2018-05-18 07:05:55

标签: session url cookies

我是网络应用程序的新手,我正在学习cookie和会话,我理解HTTP是无状态协议,使其成为有状态我们在客户端使用cookie和服务器端会话。

  1. 当用户请求网页时,它会发送所有可用的cookie PC上的浏览器。
  2. 如果任何一个cookie与服务器端数据库,服务器匹配 显示数据,否则发送带有会话iD的set cookie(可选发送 创建会话并发送会话ID。

    一个。如果服务器发送set cookie,则客户端会在所有相应的位置发送cookie    具有会话ID的请求,仅当域名与    客户端发送的服务器。

  3. 现在我的疑问是假设我正在开发一个电子商务网站。并且服务器发送添加到购物车的项目数量,直到用户没有注销,现在可以单独使用cookie来完成为什么我们需要会话?

    有什么我不理解的吗?

4 个答案:

答案 0 :(得分:1)

这些是不同的概念:

  • Cookie - 浏览器会自动随每个请求发送此信息
  • 标头 - HTTP 请求的一部分,浏览器仅在收到指示时才会在此处发送数据。
  • 访问令牌 - 包含可能是 JWT(并识别用户)或一组随机字符的机密
  • Session - 绑定到用户 + 设备的令牌,用于对用户进行身份验证。如果用户没有访问令牌,他们可以使用会话来获取新令牌。

您可以看到 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)

由于:

  • 该会话中可能存在并且可能存在敏感数据,例如用户的 ID ,标识用户是谁。如果您只是将用户的ID存储在cookie中,则用户可以操纵它并轻松地像其他人一样构建。当然有一些方法可以缓解这种情况,但根本不允许用户使用cookie内容(因为它只是一个毫无意义的会话ID)是最简单的。
  • 它允许服务器管理会话状态;例如如果用户怀疑有人在另一台设备上以他们的身份登录,则他们可以使所有其他会话无效(“在任何地方登出”功能)。
  • 您可能正在存储很多数据,并且在每次请求时在Cookie中来回发送都会变得相当浪费。
  • 您可能希望将购物篮等内容与用户的帐户相关联,而不仅仅是用户的浏览器,因此当他们登录其他设备时,他们的购物车会跟随他们。

是的,还有一些非常好的案例,只是在cookie中存储信息是好的和优选的,特别是因为这样可以让您更容易地将服务器扩展到服务器集群,而不必担心会话信息的存储位置。这取决于您准确存储的信息。