的require_previous_session
设置有点斜,但可以(希望)与一些代码来解释。
所以ordinarilly,当你建立了一个标准的形式登录(如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
(您可以在/user/login
上的Symfony工具栏中进行检查),如上面的access_control
部分所允许的。
这意味着无论何时有人登录(即将凭据发送至/user/login_check
),他们将已经为他们创建会话,而require_previous_session
将为true。
对于大多数人来说,这很好,你不必担心这个设置。但是,如果您开始触摸安全组件的边缘,例如创建自己的身份验证提供程序或禁用安全性(特定模式的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
难道您发布security.yml文件,看你怎么配置呢? – angelwally