У меня проблемы, не знаю, почему, когда я выхожу из своего приложения, которое обрабатывается 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? Я читал документы вокруг него, но мне непонятно, и я не знаю, является ли это причиной, потому что сеанс не уничтожается должным образом, когда я выхожу из приложения. Любое объяснение вокруг этого? Если я не ошибаюсь, мое приложение автоматически выйдет из системы, когда 10 минут пройдет, не делая ничего, что означает бездействие , я прав? Но как и что делает GC для этой конфигурации? Я беру эту конфигурацию из этой темы, но пока не понимаю ее.
В качестве дополнительной заметки я работаю с Firefox | Chrome как в частных окнах, так и в кеше из браузера не должно существовать.
invalidate_session
в файле security.yml по умолчанию установлен в значение true
, в вашем config его false
, попробуйте изменить его на true
.
Для пояснения здесь приведен код из SecurityExtension.php
if (true === $firewall['logout']['invalidate_session'] && false === $firewall['stateless']) { $listener->addMethodCall('addHandler', array(new Reference('security.logout.handler.session'))); }
и 'security.logout.handler.session'
:
public function logout(Request $request, Response $response, TokenInterface $token) { $request->getSession()->invalidate(); }
….