基于客户端的会话和服务器端会话有什么区别?

What is the difference between client-side based sessions and server-side sessions?

我正在了解 Flask 中的会话,在文档中它说:

“除了默认的基于客户端的会话之外,如果您想改为在服务器端处理会话,有几个支持此功能的 Flask 扩展。”

https://flask.palletsprojects.com/en/2.0.x/quickstart/#sessions

基于客户端的会话与基于服务器端的会话有何不同?

In addition to the request object there is also a second object called session which allows you to store information specific to a user from one request to the next. This is implemented on top of cookies for you and signs the cookies cryptographically. What this means is that the user could look at the contents of your cookie but not modify it, unless they know the secret key used for signing.

因此,信息以物理方式存储在 cookie 中,例如username=john 是存储在 cookie 中的值。那是一个“client-side session”。如上所述,问题在于用户可以 查看 该数据,如果您想将 secret 数据存储在session。如果你需要它,你需要 server-side sessions 实际存储数据的地方 server-side,客户端看到的只是一些随机的无意义的 session id。 session id 存储在 cookie 中,服务器根据某个数据库中某处的该 id 查找实际的 session 数据。

client-sidesessions 的优点是服务器完全无状态,即它本身不需要存储任何数据。这意味着它不需要进行任何数据库查找来获取数据,并且您可以 - 例如 - 运行 多个并行的独立服务器,而无需担心共享 session 存储,这非常适合可扩展性。

server-side sessions 的优点是您可以存储更多数据,因为它不需要在每个请求中来回发送,而且数据是不可见的给用户。