gpt4 book ai didi

php - Symfony session 不可用异常

转载 作者:可可西里 更新时间:2023-11-01 13:53:22 24 4
gpt4 key购买 nike

有没有人很了解Symfony认证?

因为每次我尝试在启动后使用新浏览器登录时,我都会收到 SessionUnavailable 异常,文本为“没有可用的 session ,超时或未启用 cookie。”为什么我在启动后使用新浏览器时没有创建新 session ?

我挖得更深一点,发现一个选项“require_previous_session”在:vendor/symfony/symfony/src/Symfony/Component/Security/HTTP/Firewall/AbstractAuthenticationListener.php 中设置为 true,但我不知道是什么在不知道它实际做什么的情况下将其设置为 false。

任何提示都会很棒。

由于角色系统的原因,Security.yml 文件相当大,但请看这里: Security.yml

最佳答案

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但是当他们这样做时,他们会为他们创建一个 session (如果他们还没有创建的话)并且他们分配的角色将是anon(您可以在 Symfony 中查看) /user/login 上的工具栏)如上面的 access_control 部分所允许的。

这意味着无论何时有人登录(即向 /user/login_check 发送凭据)他们都已经为他们创建了一个 session 并且 require_previous_session 将为真。

对于大多数人来说,这很好,您不必担心此设置。但是,如果您开始接触安全组件的边缘,例如,创建您自己的身份验证提供程序,或禁用安全性(security: false 对于特定模式,请参阅默认的 dev firewall 作为一个例子)那么你可能会遇到这个问题。

据我所知,在您登录之前没有 session 不会造成安全损失 - 我的生产站点就是这种情况。但是,有一个好处是您可以在登录表单上使用 CSRF token ( cookbook entry ) 以提高安全性,这意味着对用户帐户的攻击要困难得多。

简短版本:如果它能解决您的问题,我不会担心设置该选项。根据您的站点大小,这样做可能会提高性能(如果您可以登录整个站点,但未经身份验证的用户不需要 session ),但在安全方面,您应该做得很好。

编辑上面的示例,将 require_previous_session 设置为 false:

firewalls:
default:
pattern: ^/user
anonymous: ~
form_login:
login_path: /user/login
check_path: /user/login_check
require_previous_session: false

关于php - Symfony session 不可用异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32802932/

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