根据标准2.4文档,security.yml配置文件允许以下配置选项:
session_fixation_strategy: none | migrate | invalidate
来源:http://symfony.com/doc/current/reference/configuration/security.html
但是,我没有在官方文档(或其他地方)中找到有关此选项实际执行的内容或其在实践中如何工作的任何详细信息。
因此,如果我将此选项设置为“migrate”或“invalidate”,这将如何影响我的系统中的会话处理?例如,如果我将其设置为“invalidate”,这是否意味着当用户导航到不同的安全上下文时,上下文本地会话无效?
答案 0 :(得分:19)
简而言之:
详细说明:
无策略: 在默认会话实现中没有(应该是)完成任务,因此会话从一个上下文维护到另一个上下文。
迁移策略: “在保留所有会话属性的同时,将当前会话迁移到新的会话ID。” (会话存储应该重新生成当前会话。) “重新生成代表此存储的id。 此方法必须调用session_regenerate_id($ destroy),除非此接口用于为单元或功能测试而设计的存储对象,其中真正的PHP会话会干扰测试。注意,重新生成+ destroy不应该清除内存中的会话数据,只删除持久存储中的会话数据。“ 因此,会话从一个上下文保留到另一个上下文。
无效策略: “清除所有会话属性并闪烁并重新生成会话,并从持久性中删除旧会话。” 因此,会话从一个上下文重新生成到另一个上下文。
您的问题没有透露您尝试获取哪种会话数据 但无论如何,不会为不同的安全上下文生成单独的会话: http://symfony.com/doc/current/reference/configuration/security.html#firewall-context
安全(身份验证)相关数据存储在单独的密钥下(基于防火墙名称)。因此,例如,如果您的防火墙名称为“main”,则身份验证令牌将存储在“_security_main”下,如果您拥有名为“foo”的防火墙(单独的上下文),则用户和相关令牌数据将存储在'_security_foo'等
下所以除了 - > getToken - > getUser(等)之外,如果你使用'none'或'migrate'会话策略,其余的会话变量将在不同的上下文中可用。
查看会话界面了解详细信息(引用来自这些文件) 供应商/ symfony的/ symfony的/ SRC / Symfony的/组件/ HttpFoundation /会话/ SessionInterface.php
默认实现: 供应商/ symfony的/ symfony的/ SRC / Symfony的/组件/ HttpFoundation /会话/ session.php文件