Symfony 会话不可用异常
Posted
技术标签:
【中文标题】Symfony 会话不可用异常【英文标题】:Symfony2 SessionUnavailable Exception 【发布时间】:2015-12-24 12:16:01 【问题描述】:是否有人非常了解 Symfony 身份验证?
因为每次我在启动后尝试使用新浏览器登录时,都会收到 SessionUnavailable 异常,并显示“无可用会话,它已超时或未启用 cookie”。为什么我在启动后使用新浏览器时没有创建新会话?
我挖得更深一点,发现一个选项“require_previous_session”在:vendor/symfony/symfony/src/Symfony/Component/Security/HTTP/Firewall/AbstractAuthenticationListener.php 中设置为 true,但我不知道在不知道它实际做什么的情况下将其设置为 false。
任何提示都会很棒。
Security.yml 文件因为角色系统而相当大,但请看这里: Security.yml
【问题讨论】:
您能否发布您的 security.yml 文件以查看您的配置方式? 【参考方案1】: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
【讨论】:
好的,所以 require_previous_session 可以是假的而没有伤害?我可以在某些配置文件中执行此操作吗?因为在其中一个供应商文件夹中执行此操作不会上传到 github。 我已经用一个例子编辑了我的答案。您还应该检查安全组件的reference documentation。 @JohnNoel 谢谢你的详细解释! +1。此外,最好弄清楚将require_previous_session
完全放入安全配置的原因......能够进行 CSRF 验证是唯一的原因吗?以上是关于Symfony 会话不可用异常的主要内容,如果未能解决你的问题,请参考以下文章
会话在某些 rspec 文件中可用,而在其他文件中不可用。怎么会?
Tomcat SSL - IllegalStateException:SSL 会话 ID 不可用
电脑开机然后显示本地会话管理器服务登陆失败,rpc服务器不可用,然后一直重启