为什么Symfony2建议避免使用'遗留'php会话?

Edd*_*die 2 php session symfony

我有一个使用标准PHP构建的Web应用程序.我正在通过使用Symfony2构建子应用程序(对于站点的管理员/所有者)来学习Symfony.到目前为止一直这么好..
我的symfony应用程序确实调用了来自"父"应用程序的一些初始化代码,并且该初始化代码设置了这个子应用程序可能或可能不想使用的一些(遗留)会话变量.

但我在Symfony文档中注意到他们建议避免使用旧版PHP会话. http://symfony.com/doc/current/components/http_foundation/sessions.html http://symfony.com/doc/current/components/http_foundation/session_php_bridge.html

他们为什么提出这个建议?

是因为Symfony会话管理"更好",(并且使用传统的SESSION超全局有点反模式) - 或者,是否存在可能由于事实导致的任何其他特定的不兼容性或问题我的"父"应用程序中的代码是使用遗留会话?还是其他一些原因?

lxg*_*lxg 5

它实际上是在http://symfony.com/doc/current/components/http_foundation/session_php_bridge.html上解释的,但它并不那么明显:

  1. SF2也使用$ _SESSION,但它"封装"了session服务中的功能.您不必担心session_start和所有这些 - 只需正确配置它,然后通过服务访问它.

  2. 该文档提到了"包",其中存储了会话数据.这些"包"是具有SF特定结构的数据容器.如果遗留服务可以完全控制$_SESSION,它可能会破坏这些结构.另一方面,遗留服务可能会创建SF2不知道并可能会损坏的结构.

例如,这是print_r(array_keys($_SESSION));Symfony2中的结果:

Array
(
    [0] => _sf2_attributes
    [1] => _sf2_flashes
    [2] => _sf2_meta
)
Run Code Online (Sandbox Code Playgroud)

一般来说,我不会说SF的会话处理更好或更糟 - 作为一个框架,它只是为会话管理的常见问题提供了一个实现.

最多,它可以被认为优于"天真"实现,尤其是(抱歉:)"PHP新手",他们不了解会话处理的所有含义.

由于会话的性质(特别是$_SESSIONPHP中的超全局),您无法100%避免与遗留代码冲突,这就是他们指出并提出解决方案如何处理此类问题的原因.