我在security.yml中设置了一个注销成功处理程序:
security:
firewalls:
secured_area:
logout:
invalidate_session: true
success_handler: acme.security.logout_success_handler
我已经在 services.yml 中设置了服务:
acme.security.logout_success_handler:
class: ACMEFooBundleSecurityHandlerLogoutSuccessHandler
并在 LogoutSuccessHandler .php 中实现代码
class LogoutSuccessHandler implements LogoutSuccessHandlerInterface
{
public function onLogoutSuccess(Request $request)
{
$request->getSession()->getFlashBag()->add('info', 'you have been logged out successfully');
return new RedirectResponse('/');
}
}
现在,如果我有任何闪光消息,我会从树枝打印:
{% for flashType, flashMessages in app.session.flashbag.all() %}
{% for flashMessage in flashMessages %}
<div class="flash-message-{{ flashType }}">{{ flashMessage|raw }}</div>
{% endfor %}
{% endfor %}
但不打印任何消息。我认为在调用注销成功处理程序并且闪存消息丢失后会重新生成会话。
您需要
设置invalidate_session: false
而不是invalidate_session: true
,这样会话就不会失效。请参阅Symfony文档。