Symfony 4 应用程序是无状态的吗?

Posted

技术标签:

【中文标题】Symfony 4 应用程序是无状态的吗?【英文标题】:Are Symfony 4 applications stateless? 【发布时间】:2019-06-30 11:58:53 【问题描述】:

为了将一个应用部署到多台机器上,我需要开发一个无状态应用。

所以我的问题是:Symfony 是无状态的吗?或者使用 Symfony 服务器变量,以便在多个服务器上我会遇到问题?

我已将 security.yml 中的无状态选项设置为 true:

firewalls:
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false
    main:
        anonymous: true
        stateless: true

为了创建一个完整的无状态应用程序,我在 Symfony 中还有什么需要考虑的吗?

【问题讨论】:

【参考方案1】:

概括起来总是有点危险,但我怀疑大多数 Symfony 应用程序都有会话形式的服务器状态。特别是,如果应用要求用户登录,则可能正在使用会话。

但是,服务器状态并不意味着您会遇到多台服务器的问题。会话变量可以存储在数据库或 redis 缓存中,因此可以共享。

我从未真正尝试过使用无状态的 true 选项。如果您尝试使用会话,不确定会发生什么。但值得一试。只要您实际上不使用会话,那么您的应用就应该是无状态的。

如果您确实需要某种状态(可能用于跟踪用户登录),那么可以使用无状态替代会话,例如 Json Web Tokens(JWT)。

【讨论】:

【参考方案2】:

这真的取决于你要使用什么。例如最佳实践中的数据库参数和app_env参数在机器上设置为ENS变量

【讨论】:

【参考方案3】:

Symfony 不必设置为需要 cookie 和会话,它同样可以(尽管需要一些配置)使用 JWT 或不记名令牌等技术。

同样,它也可以设置为使用某种形式的共享数据库来保存来自会话的信息(Redis 在这方面非常受欢迎,我目前正在使用它)。我之前用过Memcached,不过MongoDB和mysql也挺可以的。

【讨论】:

以上是关于Symfony 4 应用程序是无状态的吗?的主要内容,如果未能解决你的问题,请参考以下文章

带有 JWT 的 Spring Security Oauth2 真的是无状态的吗?

在 React 中,一个类组件可以是无状态的,而现在使用 Hooks 一个函数组件可以是有状态的吗?

Symfony 4,CORS 和 OPTION 请求

为啥 JWT 是无状态认证?

HTTP/2 是无状态协议吗?

对于 UDP 套接字,在 close() 返回的那一刻,IP 地址是无限的吗?