2222use Symfony \Component \HttpFoundation \Session \Session ;
2323use Symfony \Component \HttpFoundation \Session \SessionFactory ;
2424use Symfony \Component \HttpFoundation \Session \Storage \NativeSessionStorage ;
25- use Symfony \Component \HttpFoundation \Session \Storage \PhpBridgeSessionStorage ;
25+ use Symfony \Component \HttpFoundation \Session \Storage \NativeSessionStorageFactory ;
26+ use Symfony \Component \HttpFoundation \Session \Storage \PhpBridgeSessionStorageFactory ;
27+ use Symfony \Component \HttpFoundation \Session \Storage \SessionStorageFactoryInterface ;
2628use Symfony \Component \HttpKernel \DataCollector \RequestDataCollector ;
2729use Symfony \Component \HttpKernel \Event \FinishRequestEvent ;
2830use Symfony \Component \HttpKernel \Event \RequestEvent ;
@@ -134,20 +136,8 @@ public function testPhpBridgeAlreadyStartedSession()
134136 session_start ();
135137 $ sessionId = session_id ();
136138
137- $ requestStack = new RequestStack ();
138139 $ request = new Request ();
139- $ requestStack ->push ($ request );
140-
141- $ session = new Session ();
142- $ sessionStorage = new PhpBridgeSessionStorage ();
143-
144- $ container = new Container ();
145- $ container ->set ('request_stack ' , $ requestStack );
146- $ container ->set ('session ' , $ session );
147- $ container ->set ('session_storage ' , $ sessionStorage );
148-
149- $ request = new Request ();
150- $ listener = new SessionListener ($ container );
140+ $ listener = $ this ->createListener ($ request , new PhpBridgeSessionStorageFactory ());
151141
152142 $ event = new RequestEvent ($ this ->createMock (HttpKernelInterface::class), $ request , HttpKernelInterface::MAIN_REQUEST );
153143
@@ -162,17 +152,14 @@ public function testPhpBridgeAlreadyStartedSession()
162152 */
163153 public function testSessionCookieWrittenNoCookieGiven ()
164154 {
165- $ session = new Session ();
166- $ session ->set ('hello ' , 'world ' );
167-
168- $ container = new Container ();
169- $ container ->set ('initialized_session ' , $ session );
155+ $ request = new Request ();
156+ $ listener = $ this ->createListener ($ request , new NativeSessionStorageFactory ());
170157
171- $ listener = new SessionListener ($ container );
172158 $ kernel = $ this ->createMock (HttpKernelInterface::class);
173159
174- $ request = new Request ();
175160 $ listener ->onKernelRequest (new RequestEvent ($ kernel , $ request , HttpKernelInterface::MAIN_REQUEST ));
161+ $ session = $ request ->getSession ();
162+ $ session ->set ('hello ' , 'world ' );
176163
177164 $ response = new Response ();
178165 $ listener ->onKernelResponse (new ResponseEvent ($ kernel , $ request , HttpKernelInterface::MAIN_REQUEST , $ response ));
@@ -191,22 +178,25 @@ public function testSessionCookieWrittenNoCookieGiven()
191178 */
192179 public function testSessionCookieNotWrittenCookieGiven ()
193180 {
194- $ session = new Session ();
195- $ session ->set ('hello ' , 'world ' );
196- $ sessionId = $ session ->getId ();
197-
198- $ container = new Container ();
199- $ container ->set ('initialized_session ' , $ session );
181+ $ sessionId = $ this ->createValidSessionId ();
200182
201- $ listener = new SessionListener ($ container );
202- $ kernel = $ this ->createMock (HttpKernelInterface::class);
183+ $ this ->assertNotEmpty ($ sessionId );
203184
204185 $ request = new Request ();
205186 $ request ->cookies ->set ('PHPSESSID ' , $ sessionId );
187+
188+ $ listener = $ this ->createListener ($ request , new NativeSessionStorageFactory ());
189+
190+ $ kernel = $ this ->createMock (HttpKernelInterface::class);
206191 $ listener ->onKernelRequest (new RequestEvent ($ kernel , $ request , HttpKernelInterface::MAIN_REQUEST ));
207192
193+ $ session = $ request ->getSession ();
194+ $ this ->assertSame ($ sessionId , $ session ->getId ());
195+ $ session ->set ('hello ' , 'world ' );
196+
208197 $ response = new Response ();
209198 $ listener ->onKernelResponse (new ResponseEvent ($ kernel , $ request , HttpKernelInterface::MAIN_REQUEST , $ response ));
199+ $ this ->assertSame ($ sessionId , $ session ->getId ());
210200
211201 $ cookies = $ response ->headers ->getCookies ();
212202 $ this ->assertCount (0 , $ cookies );
@@ -217,21 +207,18 @@ public function testSessionCookieNotWrittenCookieGiven()
217207 */
218208 public function testSessionCookieClearedWhenInvalidated ()
219209 {
220- $ session = new Session ();
221-
222- $ container = new Container ();
223- $ container ->set ('initialized_session ' , $ session );
224-
225- $ listener = new SessionListener ($ container );
210+ $ sessionId = $ this ->createValidSessionId ();
211+ $ request = new Request ();
212+ $ request ->cookies ->set ('PHPSESSID ' , $ sessionId );
213+ $ listener = $ this ->createListener ($ request , new NativeSessionStorageFactory ());
226214 $ kernel = $ this ->createMock (HttpKernelInterface::class);
227215
228- $ request = new Request ();
229216 $ listener ->onKernelRequest (new RequestEvent ($ kernel , $ request , HttpKernelInterface::MAIN_REQUEST ));
230217
218+ $ session = $ request ->getSession ();
231219 $ session ->start ();
232220 $ sessionId = $ session ->getId ();
233221 $ this ->assertNotEmpty ($ sessionId );
234- $ request ->cookies ->set ($ session ->getName (), $ sessionId );
235222 $ _SESSION ['hello ' ] = 'world ' ; // check compatibility to php session bridge
236223
237224 $ session ->invalidate ();
@@ -252,21 +239,18 @@ public function testSessionCookieClearedWhenInvalidated()
252239 */
253240 public function testSessionCookieNotClearedWhenOtherVariablesSet ()
254241 {
255- $ session = new Session ();
256-
257- $ container = new Container ();
258- $ container ->set ('initialized_session ' , $ session );
259-
260- $ listener = new SessionListener ($ container );
242+ $ sessionId = $ this ->createValidSessionId ();
243+ $ request = new Request ();
244+ $ request ->cookies ->set ('PHPSESSID ' , $ sessionId );
245+ $ listener = $ this ->createListener ($ request , new NativeSessionStorageFactory ());
261246 $ kernel = $ this ->createMock (HttpKernelInterface::class);
262247
263- $ request = new Request ();
264248 $ listener ->onKernelRequest (new RequestEvent ($ kernel , $ request , HttpKernelInterface::MAIN_REQUEST ));
265249
250+ $ session = $ request ->getSession ();
266251 $ session ->start ();
267252 $ sessionId = $ session ->getId ();
268253 $ this ->assertNotEmpty ($ sessionId );
269- $ request ->cookies ->set ($ session ->getName (), $ sessionId );
270254 $ _SESSION ['hello ' ] = 'world ' ;
271255
272256 $ response = new Response ();
@@ -281,17 +265,13 @@ public function testSessionCookieNotClearedWhenOtherVariablesSet()
281265 */
282266 public function testSessionCookieSetWhenOtherNativeVariablesSet ()
283267 {
284- $ session = new Session ();
285-
286- $ container = new Container ();
287- $ container ->set ('initialized_session ' , $ session );
288-
289- $ listener = new SessionListener ($ container );
268+ $ request = new Request ();
269+ $ listener = $ this ->createListener ($ request , new NativeSessionStorageFactory ());
290270 $ kernel = $ this ->createMock (HttpKernelInterface::class);
291271
292- $ request = new Request ();
293272 $ listener ->onKernelRequest (new RequestEvent ($ kernel , $ request , HttpKernelInterface::MAIN_REQUEST ));
294273
274+ $ session = $ request ->getSession ();
295275 $ session ->start ();
296276 $ sessionId = $ session ->getId ();
297277 $ this ->assertNotEmpty ($ sessionId );
@@ -756,4 +736,36 @@ public function testResetUnclosedSession()
756736 $ this ->assertEmpty (session_id ());
757737 $ this ->assertSame (\PHP_SESSION_NONE , session_status ());
758738 }
739+
740+ private function createListener (Request $ request , SessionStorageFactoryInterface $ sessionFactory )
741+ {
742+ $ requestStack = new RequestStack ();
743+ $ request = new Request ();
744+ $ requestStack ->push ($ request );
745+
746+ $ sessionFactory = new SessionFactory (
747+ $ requestStack ,
748+ $ sessionFactory ,
749+ );
750+
751+ $ container = new Container ();
752+ $ container ->set ('request_stack ' , $ requestStack );
753+ $ container ->set ('session_factory ' , $ sessionFactory );
754+
755+ $ listener = new SessionListener ($ container );
756+
757+ return new SessionListener ($ container );
758+ }
759+
760+ private function createValidSessionId (): string
761+ {
762+ session_start ();
763+ $ sessionId = session_id ();
764+ $ _SESSION ['some ' ] = 'value ' ;
765+ session_write_close ();
766+ $ _SESSION = [];
767+ session_abort ();
768+
769+ return $ sessionId ;
770+ }
759771}
0 commit comments