/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/EventListener/TestSessionListener.php

https://github.com/xbojer/gfw · PHP · 77 lines · 42 code · 12 blank · 23 comment · 6 complexity · 47343f871f2daeb6f3e73679d7b2c50e MD5 · raw file

  1. <?php
  2. /*
  3. * This file is part of the Symfony package.
  4. *
  5. * (c) Fabien Potencier <fabien@symfony.com>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Symfony\Bundle\FrameworkBundle\EventListener;
  11. use Symfony\Component\HttpFoundation\Cookie;
  12. use Symfony\Component\HttpKernel\HttpKernelInterface;
  13. use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
  14. use Symfony\Component\HttpKernel\Event\GetResponseEvent;
  15. use Symfony\Component\DependencyInjection\ContainerInterface;
  16. /**
  17. * TestSessionListener.
  18. *
  19. * Saves session in test environment.
  20. *
  21. * @author Bulat Shakirzyanov <mallluhuct@gmail.com>
  22. * @author Fabien Potencier <fabien@symfony.com>
  23. */
  24. class TestSessionListener
  25. {
  26. protected $container;
  27. public function __construct(ContainerInterface $container)
  28. {
  29. $this->container = $container;
  30. }
  31. public function onKernelRequest(GetResponseEvent $event)
  32. {
  33. if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
  34. return;
  35. }
  36. // bootstrap the session
  37. if ($this->container->has('session')) {
  38. $this->container->get('session');
  39. }
  40. $cookies = $event->getRequest()->cookies;
  41. if ($cookies->has(session_name())) {
  42. session_id($cookies->get(session_name()));
  43. } else {
  44. session_id('');
  45. }
  46. }
  47. /**
  48. * Checks if session was initialized and saves if current request is master
  49. * Runs on 'kernel.response' in test environment
  50. *
  51. * @param FilterResponseEvent $event
  52. */
  53. public function onKernelResponse(FilterResponseEvent $event)
  54. {
  55. if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
  56. return;
  57. }
  58. if ($session = $event->getRequest()->getSession()) {
  59. $session->save();
  60. $session->close();
  61. $params = session_get_cookie_params();
  62. $event->getResponse()->headers->setCookie(new Cookie(session_name(), session_id(), 0 === $params['lifetime'] ? 0 : time() + $params['lifetime'], $params['path'], $params['domain'], $params['secure'], $params['httponly']));
  63. }
  64. }
  65. }