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



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

我看到的该条目的值包括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-适用于传统应用程序

从开发人员的角度来看,有一个session服务可以抽象处理会话。session服务依赖于某些会话存储服务Session storage从PHP角度实现会话管理(例如调用session_start()函数)存储还依赖于一些会话处理程序HandlerSessionStorage的实现,它告诉如何以及在哪里物理存储会话。

这种三层设计允许为测试创建存储,该存储根本不调用session_start(),也不使用处理程序(session.storage.mock_file)。或者创建处理程序,该处理程序可以从任何位置存储和加载会话(session.storage.native)。session.storage.php_bridge解决了session_start()由外部PHP代码调用(而不是由Symfony会话存储调用)的情况。

我希望大家都能明白。

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

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

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

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

对于Symfony 6.x,它已经改变了。举个例子,这对我来说很有效:

framework:
test: true
session:
storage_factory_id: session.storage.factory.mock_file

最新更新