在Symfony配置中,有一个条目framework.session.storage_id
。此设置也会显示在Symfony configuration documentation的默认配置中,但不会对其进行说明。我的假设是它定义了会话数据存储在服务器端的位置。
我在此条目中看到的值包括session.storage.mock_file
,session.storage.native
和session.storage.filesystem
。我不确定这些值到底意味着什么(例如模拟文件和文件系统之间有什么区别?)并且还认为这不是可能值的完整列表。
那么这个配置密钥控制究竟是什么以及哪些值有效?
答案 0 :(得分:8)
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()
函数)。 存储还取决于某些会话处理程序。 处理程序是\SessionStorage
的实现,它告诉会话物理存储的方式和位置。
This three layer design允许创建用于测试的存储,它根本不会调用session_start()
,也不会使用处理程序(session.storage.mock_file
)。或创建处理程序,可以从任何地方存储和加载会话(session.storage.native
)。 session.storage.php_bridge
解决了外部PHP代码(而不是Symfony 会话存储)调用session_start()
时的情况。
我希望明白这一点。
答案 1 :(得分:2)
Symfony中的会话管理基于两个主要规则。
session_*()
和$_SESSION
global。但是,存在一些例外情况。有时可能需要将Symfony集成到遗留应用程序中,该应用程序以session_start()
启动会话。
使用 session.storage.php_bridge
指令,您可以使用特殊网关管理会话,该网关旨在允许Symfony使用在框架外部启动的会话。
为了使代码可以使用可测试的会话, session.storage.mock_file
指令允许模拟PHP会话的流程,而无需真正启动它。