Session 既然我们已经有了cookies,为什么还需要会话?

Session 既然我们已经有了cookies,为什么还需要会话?,session,url,cookies,Session,Url,Cookies,我是web应用程序的新手,我正在学习Cookie和会话,我了解HTTP是无状态协议,我们在客户端使用Cookie,在服务器端使用会话 当用户请求一个网页时,它会发送该网页可用的所有cookie 电脑上的浏览器 如果任何一个cookie与服务器端数据库匹配,则服务器 显示数据,否则发送带有会话iD的set cookie(发送可选) 创建会话并发送会话ID) a。如果服务器发送set cookie,则客户机将以所有相应的方式发送cookie 仅当域名与会话id匹配时,才请求会话id 客户端发送到的服

我是web应用程序的新手,我正在学习Cookie和会话,我了解HTTP是无状态协议,我们在客户端使用Cookie,在服务器端使用会话

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

    a。如果服务器发送set cookie,则客户机将以所有相应的方式发送cookie 仅当域名与会话id匹配时,才请求会话id 客户端发送到的服务器

  • 现在我的疑问是,假设我在一个电子商务网站上工作。服务器发送添加到购物车中的物品数量,直到用户不注销为止,现在可以单独使用cookie完成,为什么我们需要会话

    有什么我不明白的吗?

    通常的模式是

    • cookie仅包含唯一的会话标识符(但本身没有有用的信息)

    • 会话存储(服务器端)包含此会话的关联数据。这可能是a)非常大,b)对用户/浏览器隐藏,c)可信(因为用户不能仅在浏览器中修改)


    最好使用会话,因为实际值对客户端是隐藏的,您可以控制数据何时过期和失效。如果全部基于cookie,用户(或黑客)可以操纵cookie数据,然后向您的站点播放请求。

    因为:

    • 该会话中可能存在并且可能存在敏感数据,例如用户的id,用于识别用户。如果您只是将用户的id存储在cookie中,用户就可以操纵它,并轻松地伪装成其他任何人。当然有一些方法可以缓解这种情况,但最简单的方法就是不允许用户使用cookie内容(因为它只是一个毫无意义的会话id)
    • 它允许服务器管理会话状态;e、 g.如果用户怀疑有人以其他设备上的身份登录,他们可以使所有其他会话无效(“在任何地方注销我”功能)
    • 您可能正在存储大量数据,并且在每次请求时在cookie中来回发送数据可能会变得相当浪费
    • 您可能希望将购物篮之类的东西与用户的帐户相关联,而不仅仅是与用户的浏览器相关联,因此当他们登录到另一台设备时,他们的购物车会跟着他们

    是的,也有一些非常好的情况,仅仅将信息存储在cookie中是很好而且更可取的,特别是因为这样可以更容易地将服务器扩展到服务器集群,而不必担心会话信息存储在何处。这取决于您存储的确切信息。

    这些是不同的概念:

    • Cookie-浏览器会在每次请求时自动发送此消息
    • Header—HTTP请求的一部分,浏览器仅在收到指示时才会在此处发送数据
    • 访问令牌-包含秘密,可能是JWT(并标识用户)或随机字符集
    • 会话-绑定到用户+设备的令牌,用于验证用户。如果用户没有访问令牌,他们可以使用会话获取新令牌
    您可以看到Cookie/Header是,其中和access-token/session-token是什么

    用户需要在您的服务中进行身份验证。这意味着您需要能够识别用户。这可以通过JWT、会话令牌、IP地址、签名等实现。。。这与该数据如何从用户传输到服务是分开的

    因此,当你说用户有cookies时为什么我需要会话时,这些都是完全不相关的。会话id可以保存在cookie中,这只是一个选项

    cookie中的会话id是否对应于服务器端的实际数据是另一个完全不同的问题。会话令牌应该是加密(或签名)对象,如包含用户标识信息的JWT
    ,还是应该将数据保存在服务器端数据库中,并且仅传输随机字符串标识符。谁知道呢

    答案将基于对您的应用程序至关重要的内容。一般来说,服务器端的会话跟踪是一个遗留概念,而新的热点(现在已经过时)是使sessionId成为一个JWT保存了一个仅HTTP的cookie以确保安全。然后把每一个请求都传递出去

    很多服务都有会话和访问令牌管理,关于令牌的工作示例和更多信息,请查看。

    和d)通过服务器端处理检查指标/分析和其他有趣的内容