require_previous_session 设置有点倾斜,但可以(希望)用一些代码来解释。
所以通常情况下,当您设置标准表单登录(如the docs)时,在您的security.yml 文件中设置您的防火墙模式(如/user)并设置anonymous 选项。现在,在您的访问控制中,您将登录页面(例如/user/login)设置为具有IS_AUTHENTICATED_ANONYMOUSLY 的角色,如下所示:
firewalls:
default:
pattern: ^/user
anonymous: ~
form_login:
login_path: /user/login
check_path: /user/login_check
access_control:
- { path: ^/user/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/user, roles: ROLE_USER }
现在,当有人转到/user 时会发生什么,他们会被转发到/user/login; 但是当他们这样做时,他们将为他们创建一个会话(如果他们还没有)并且他们分配的角色将是 anon(你可以在 @987654333 上时在 Symfony 工具栏中检查这个@) 如上面的access_control 部分所允许的那样。
这意味着无论何时有人登录(即向/user/login_check 发送凭据),他们都已经为他们创建了一个会话,require_previous_session 将为真。
对于大多数人来说,这很好,您不必担心此设置。但是,如果您开始接触安全组件的边缘,例如,创建您自己的身份验证提供程序,或禁用安全性(security: false 用于特定模式,请参阅默认的dev 防火墙以获取此示例),那么您可以遇到这个问题。
据我所知,在您登录之前没有进行会话不会造成安全损失 - 我有生产站点去这种情况。但是,这样做的好处是您可以在登录表单上使用 CSRF 令牌 (cookbook entry) 以提高安全性,这意味着对用户帐户的攻击要困难得多。
短版:如果它可以解决您的问题,我不会担心设置该选项。根据您的站点大小,这样做可能会提高性能(如果您可以登录整个站点但未经身份验证的用户不需要会话),但在安全方面,您应该很好。
编辑,上面的示例,require_previous_session 设置为 false:
firewalls:
default:
pattern: ^/user
anonymous: ~
form_login:
login_path: /user/login
check_path: /user/login_check
require_previous_session: false