Symfony1 Symfony 1.4更改身份验证时重新创建会话/sessionid

Symfony1 Symfony 1.4更改身份验证时重新创建会话/sessionid,symfony1,symfony-1.4,Symfony1,Symfony 1.4,我使用的是symfony 1.4,每次用户通过身份验证时,symfony都会为用户重新创建会话。例如,如果我访问了一个站点,但没有登录,我有一个不同的会话id;如果我登录,我有一个新的会话id;如果我注销,我还有一个新的会话id。在symfony 1.0中并非如此,我想知道这是否应该是这样的?这是一种正确的行为。这与PHP会话有关,而不是symfony如何处理它们。我认为symfony 1.0以前没有什么不同 会话id应该是唯一的,并且很难猜测。如果您总是获得与曾经嗅探过会话id的人相同的会话i

我使用的是symfony 1.4,每次用户通过身份验证时,symfony都会为用户重新创建会话。例如,如果我访问了一个站点,但没有登录,我有一个不同的会话id;如果我登录,我有一个新的会话id;如果我注销,我还有一个新的会话id。在symfony 1.0中并非如此,我想知道这是否应该是这样的?

这是一种正确的行为。这与PHP会话有关,而不是symfony如何处理它们。我认为symfony 1.0以前没有什么不同


会话id应该是唯一的,并且很难猜测。如果您总是获得与曾经嗅探过会话id的人相同的会话id,那么他可以随时使用它(将其存储在cookie中,并使用您的凭据使用网站)。

我刚刚检查了1.0的源代码,但它不存在。
版本1.1及以上每次更改身份验证或添加/删除凭据时都会重新生成会话ID。
这是一个非常好的安全措施,可以防止会话固定攻击


到trac中的相关变更集。

我的意思是,每次进行身份验证时,它都会对其进行更改,因此,如果您访问站点,立即登录并注销,您已经有了3个不同的会话ID。第一个是在您首次访问站点时创建的,在您登录之前保持不变。当您登录时,将创建一个新会话id,并且只要您保持登录状态,该id将保持不变。当您注销时,它会分配另一个。在Symfony 1.0中,情况并非如此。在这种情况下,您对Symfony 1.0的看法可能是正确的。无论如何,出于安全考虑,它在1.4中。很好地阅读了会话固定(以及一般的会话安全):非常感谢您提供的信息。我正在尝试使用数据库会话在站点上实现“who's online”功能,但不确定如何实现这一点,因为有太多过期会话,您可以尝试将sfSessionStorage子类化,以某种方式在REGENATE()函数中标记当前会话,然后告诉factories.yml中的symfony使用您的类。我刚刚决定在登录时手动在会话数据库中设置用户id,并在注销时取消设置