У меня возникают некоторые проблемы, не знаю почему, когда я выхожу из своего приложения, которое обрабатывается 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
в твоем конфиге его 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();
}
….
Других решений пока нет …