我遇到了一些问题,不知道为什么,当我从由 FOSUserBundle 处理的应用程序注销时,因为当前会话永远不会被破坏,甚至不清楚当我重新登录时会导致问题,因为我在会话上存储了一些数据。这就是我的security.yml
好像:
security:
encoders:
FOS\UserBundle\Model\UserInterface: sha512
role_hierarchy:
ROLE_USER: ROLE_USER
ROLE_ADMIN: ROLE_ADMIN
providers:
fos_userbundle:
id: fos_user.user_provider.username_email
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
login_path: /login
check_path: /login_check
default_target_path: home
always_use_default_target_path: true
logout:
path: fos_user_security_logout
target: /
invalidate_session: false
anonymous: ~
access_control:
...
这就是session
键配置在config.yml
:
session:
# handler_id set to null will use default session handler from php.ini
handler_id: ~
cookie_lifetime: 86400
gc_maxlifetime: 600 # session will expire after 10 minutes of inactivity
gc_probability: 1
gc_divisor: 1
我这里还缺少其他东西吗?
作为这个问题的第二部分,我有一个很大的疑问,因为这对我来说是新事物,并且它与 Symfony2 中的垃圾收集如何工作有关?我正在读书docs http://symfony.com/doc/current/components/http_foundation/session_configuration.html#configuring-garbage-collection围绕它,但我不清楚,而且我也不知道这是否是原因,因为当我从应用程序注销时,会话没有正确销毁。对此有什么解释吗?如果我没记错的话,当 10 分钟过去而不执行任何操作时,我的应用程序将自动注销用户,这意味着不活动, 我是对的?但是 GC 部分在这个配置上如何或做什么呢?我从以下位置获取该配置this https://stackoverflow.com/a/21285238/719427主题,但还不太明白。
作为补充说明,我在私人窗口中使用 Firefox|Chrome,因此不应存在来自浏览器的缓存。
invalidate_session
选项中安全.yml http://symfony.com/doc/current/reference/configuration/security.html文件默认设置为true
,在你的配置中false
,尝试将其更改为true
.
为了澄清起见,这里是来自的代码SecurityExtension.php
if (true === $firewall['logout']['invalidate_session'] && false === $firewall['stateless']) {
$listener->addMethodCall('addHandler', array(new Reference('security.logout.handler.session')));
}
and 'security.logout.handler.session'
:
public function logout(Request $request, Response $response, TokenInterface $token)
{
$request->getSession()->invalidate();
}
....
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)