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 真的是无状态的吗?