framework.session.storage_id 的有效值是多少?

What are valid values for framework.session.storage_id?

在 Symfony 配置中有一个条目 framework.session.storage_id。此设置也出现在 Symfony configuration documentation 的默认配置中,但没有解释。我的假设是它定义了会话数据在服务器端的存储位置。

我看到的这个条目的值包括 session.storage.mock_filesession.storage.nativesession.storage.filesystem。我不确定这些值的确切含义(例如,模拟文件和文件系统之间有什么区别?)并且认为这不是可能值的完整列表。

那么这个配置键究竟控制什么以及哪些值是有效的?

framework.session.storage_id 的有效值如下:

  • session.storage.mock_file - 用于测试。它根本不启动会话。
  • session.storage.filesystem - 用于测试。它是 session.storage.mock_file.
  • 的别名
  • session.storage.native - 使用定义的会话处理程序的默认实现
  • session.storage.php_bridge - for legacy apps

从开发人员的角度来看,有一个 session 服务可以抽象化使用会话。 session 服务依赖于某些 会话存储服务 会话存储从PHP的角度实现会话管理(例如调用session_start()函数)。 存储 还依赖于某些会话处理程序Handler\SessionStorage 的实现,它说明会话的物理存储方式和位置。

This three layer design 允许创建 存储 用于测试,它根本不调用 session_start() 并且不使用处理程序 (session.storage.mock_file)。或者创建可以从任何地方存储和加载会话的 处理程序 (session.storage.native)。 session.storage.php_bridge 解决了 session_start() 被外部 PHP 代码调用的情况(不是 Symfony session storage)。

希望看得清楚。

Symfony 中的会话管理基于两个主要规则。

  1. Symfony 必须启动会话。
  2. Symfony 会话旨在取代 PHP 本机函数 session_*()$_SESSION 全局函数的使用。

但是,也存在一些例外情况。有时可能需要将 Symfony 集成到遗留应用程序中,它以 session_start() 启动会话。 使用 session.storage.php_bridge 指令,您可以使用特殊网关管理会话,该网关旨在允许 Symfony 处理在框架外启动的会话。

为了使使用会话的代码可测试,session.storage.mock_file 指令允许模拟 PHP 会话的流程而无需真正启动它。