在Symfony配置中有一个条目framework.session.storage_id
。这个设置也出现在Symfony configuration documentation的默认配置中,但没有解释。我的假设是它定义了会话数据在服务器端的存储位置。
我看到的这个条目的值包括session.storage.mock_file
,session.storage.native
和session.storage.filesystem
。我不确定这些值的确切含义(例如,mock文件和文件系统之间的区别是什么?),并且还认为这不是可能值的完整列表。
那么这个配置键究竟控制什么,哪些值是有效的呢?
3条答案
按热度按时间ruoxqz4g1#
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从开发者的Angular 来看,有一个
session
服务,它抽象了与会话的工作。session
服务依赖于一些 * 会话存储服务 。 会话存储 * 从PHP的Angular 实现了会话管理(例如调用session_start()
函数)。* 存储 * 还取决于某些 * 会话处理程序 。 处理程序 *是\SessionStorage
的实现,它告诉如何以及在哪里物理存储会话。This three layer design允许为测试创建 storage,它根本不调用
session_start()
,也不使用handler(session.storage.mock_file
)。或者创建可以从任何地方存储和加载会话的 handler(session.storage.native
)。session.storage.php_bridge
解决了session_start()
被外部PHP代码调用的情况(而不是Symfony session storage)。我希望这是清楚的理解。
drkbr07n2#
Symfony中的会话管理基于两个主要规则。
session_*()
和$_SESSION
global的使用。然而,也存在一些例外。有时可能需要将Symfony集成到遗留应用程序中,该应用程序使用
session_start()
启动会话。通过**session.storage.php_bridge
指令,您可以使用特殊的网关管理会话,该网关旨在允许Symfony使用在框架外部启动的会话。为了使使用会话的代码可测试,
session.storage.mock_file
**指令允许模拟PHP会话的流,而无需真正启动它。sqxo8psd3#
对于Symfony 6.x,它已经改变了。作为一个例子,这对我来说很有效: