|
| 1 | +<?php |
| 2 | + |
| 3 | +use Symfony\Component\DependencyInjection\Container; |
| 4 | +use Symfony\Component\HttpFoundation\Request; |
| 5 | +use Symfony\Component\HttpFoundation\RequestStack; |
| 6 | +use Symfony\Component\HttpFoundation\Response; |
| 7 | +use Symfony\Component\HttpFoundation\Session\SessionFactory; |
| 8 | +use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorageFactory; |
| 9 | +use Symfony\Component\HttpKernel\Event\RequestEvent; |
| 10 | +use Symfony\Component\HttpKernel\Event\ResponseEvent; |
| 11 | +use Symfony\Component\HttpKernel\EventListener\SessionListener; |
| 12 | +use Symfony\Component\HttpKernel\HttpKernelInterface; |
| 13 | + |
| 14 | +/** @var Response $r */ |
| 15 | +$r = require __DIR__.'/common.inc'; |
| 16 | + |
| 17 | +$sessionId = 'vqd4dpbtst3af0k4sdl18nebkn'; |
| 18 | +session_id($sessionId); |
| 19 | +$sessionName = session_name(); |
| 20 | +$_COOKIE[$sessionName] = $sessionId; |
| 21 | + |
| 22 | +$request = new Request(); |
| 23 | +$request->cookies->set($sessionName, $sessionId); |
| 24 | + |
| 25 | +$requestStack = new RequestStack(); |
| 26 | +$requestStack->push($request); |
| 27 | + |
| 28 | +$sessionFactory = new SessionFactory($requestStack, new NativeSessionStorageFactory()); |
| 29 | + |
| 30 | +$container = new Container(); |
| 31 | +$container->set('request_stack', $requestStack); |
| 32 | +$container->set('session_factory', $sessionFactory); |
| 33 | + |
| 34 | +$listener = new SessionListener($container); |
| 35 | + |
| 36 | +$kernel = new class($r) implements HttpKernelInterface { |
| 37 | + /** |
| 38 | + * @var Response |
| 39 | + */ |
| 40 | + private $response; |
| 41 | + |
| 42 | + public function __construct(Response $response) |
| 43 | + { |
| 44 | + $this->response = $response; |
| 45 | + } |
| 46 | + |
| 47 | + public function handle(Request $request, int $type = self::MAIN_REQUEST, bool $catch = true): Response |
| 48 | + { |
| 49 | + return $this->response; |
| 50 | + } |
| 51 | +}; |
| 52 | + |
| 53 | +$listener->onKernelRequest(new RequestEvent($kernel, $request, HttpKernelInterface::MAIN_REQUEST)); |
| 54 | +$session = $request->getSession(); |
| 55 | +$session->set('foo', 'bar'); |
| 56 | +$session->invalidate(); |
| 57 | + |
| 58 | +$listener->onKernelResponse(new ResponseEvent($kernel, $request, HttpKernelInterface::MAIN_REQUEST, $r)); |
| 59 | + |
| 60 | +$r->sendHeaders(); |
0 commit comments