framework.session.storage_id的有效值是什么?

时间:2015-04-10 10:53:07

标签: symfony config

在Symfony配置中,有一个条目framework.session.storage_id。此设置也会显示在Symfony configuration documentation的默认配置中,但不会对其进行说明。我的假设是它定义了会话数据存储在服务器端的位置。

我在此条目中看到的值包括session.storage.mock_filesession.storage.nativesession.storage.filesystem。我不确定这些值到底意味着什么(例如模拟文件和文件系统之间有什么区别?)并且还认为这不是可能值的完整列表。

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

2 个答案:

答案 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中的会话管理基于两个主要规则。

  1. Symfony必须开始会议。
  2. Symfony会话旨在取代使用PHP本机函数session_*()$_SESSION global。
  3. 但是,存在一些例外情况。有时可能需要将Symfony集成到遗留应用程序中,该应用程序以session_start()启动会话。 使用 session.storage.php_bridge 指令,您可以使用特殊网关管理会话,该网关旨在允许Symfony使用在框架外部启动的会话。

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