gpt4 book ai didi

security - Symfony2 session 固定如何工作?

转载 作者:行者123 更新时间:2023-12-02 15:00:44 25 4
gpt4 key购买 nike

根据标准 2.4 文档,security.yml 配置文件允许以下配置选项:

session_fixation_strategy: none | migrate | invalidate

来源:http://symfony.com/doc/current/reference/configuration/security.html

但是,我无法在官方文档(或其他地方)中找到有关此选项实际用途或它在实践中如何工作的任何详细信息。

那么,如果我将此选项设置为“迁移”或“无效”,这将如何影响我系统中的 session 处理?例如,如果我将其设置为“无效”,这是否意味着当用户导航到不同的安全上下文时,上下文本地 session 将失效?

最佳答案

简而言之:

  • NONE: session 未更改
  • MIGRATE: session ID 已更新,属性保留
  • INVALIDATE: session ID 已更新,属性丢失

详细:

  1. 无策略:在默认 session 实现中什么都不做(应该做),因此 session 是从一个上下文维护到另一个上下文的。

  2. 迁移策略:“将当前 session 迁移到新的 session ID,同时保留所有 session 属性。”( session 存储应该重新生成当前 session 。)“重新生成代表此存储的 id。此方法必须调用 session_regenerate_id($destroy) ,除非此接口(interface)用于为单元或功能测试而设计的存储对象,其中真实的 PHP session 会干扰测试。请注意,重新生成+销毁不应清除内存中的 session 数据,而只能从持久存储中删除 session 数据。”因此, session 从一个上下文保留到另一上下文。

  3. 使策略无效:“清除所有 session 属性并刷新并重新生成 session ,并从持久性中删除旧 session 。”因此, session 从一种上下文重新生成到另一种上下文。

您的问题没有透露您试图获取哪种 session 数据。
但无论如何,不​​会为不同的安全上下文生成单独的 session : http://symfony.com/doc/current/reference/configuration/security.html#firewall-context

安全(身份验证)相关数据存储在单独的 key 下(基于防火墙名称)。因此,例如,如果您有一个名为“main”的防火墙,则身份验证 token 将存储在“_security_main”下,如果您有一个名为“foo”的防火墙(单独的上下文),则用户和相关 token 数据将存储在“_security_main”下。存储在“_security_foo”等下。

因此,除了 ->getToken ->getUser (等)之外,如果您使用“无”或“迁移” session 策略,其余 session 变量将在不同的上下文中可用。

查看 session 界面以了解详细信息(引用来自这些文件)供应商/symfony/symfony/src/Symfony/Component/HttpFoundation/Session/SessionInterface.php

默认实现:供应商/symfony/symfony/src/Symfony/Component/HttpFoundation/Session/Session.php

关于security - Symfony2 session 固定如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21129699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com