22
22
use Symfony \Component \HttpFoundation \Session \Session ;
23
23
use Symfony \Component \HttpFoundation \Session \SessionFactory ;
24
24
use 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 ;
26
28
use Symfony \Component \HttpKernel \DataCollector \RequestDataCollector ;
27
29
use Symfony \Component \HttpKernel \Event \FinishRequestEvent ;
28
30
use Symfony \Component \HttpKernel \Event \RequestEvent ;
@@ -134,20 +136,8 @@ public function testPhpBridgeAlreadyStartedSession()
134
136
session_start ();
135
137
$ sessionId = session_id ();
136
138
137
- $ requestStack = new RequestStack ();
138
139
$ 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 ());
151
141
152
142
$ event = new RequestEvent ($ this ->createMock (HttpKernelInterface::class), $ request , HttpKernelInterface::MAIN_REQUEST );
153
143
@@ -162,17 +152,14 @@ public function testPhpBridgeAlreadyStartedSession()
162
152
*/
163
153
public function testSessionCookieWrittenNoCookieGiven ()
164
154
{
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 ());
170
157
171
- $ listener = new SessionListener ($ container );
172
158
$ kernel = $ this ->createMock (HttpKernelInterface::class);
173
159
174
- $ request = new Request ();
175
160
$ listener ->onKernelRequest (new RequestEvent ($ kernel , $ request , HttpKernelInterface::MAIN_REQUEST ));
161
+ $ session = $ request ->getSession ();
162
+ $ session ->set ('hello ' , 'world ' );
176
163
177
164
$ response = new Response ();
178
165
$ listener ->onKernelResponse (new ResponseEvent ($ kernel , $ request , HttpKernelInterface::MAIN_REQUEST , $ response ));
@@ -191,22 +178,25 @@ public function testSessionCookieWrittenNoCookieGiven()
191
178
*/
192
179
public function testSessionCookieNotWrittenCookieGiven ()
193
180
{
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 ();
200
182
201
- $ listener = new SessionListener ($ container );
202
- $ kernel = $ this ->createMock (HttpKernelInterface::class);
183
+ $ this ->assertNotEmpty ($ sessionId );
203
184
204
185
$ request = new Request ();
205
186
$ request ->cookies ->set ('PHPSESSID ' , $ sessionId );
187
+
188
+ $ listener = $ this ->createListener ($ request , new NativeSessionStorageFactory ());
189
+
190
+ $ kernel = $ this ->createMock (HttpKernelInterface::class);
206
191
$ listener ->onKernelRequest (new RequestEvent ($ kernel , $ request , HttpKernelInterface::MAIN_REQUEST ));
207
192
193
+ $ session = $ request ->getSession ();
194
+ $ this ->assertSame ($ sessionId , $ session ->getId ());
195
+ $ session ->set ('hello ' , 'world ' );
196
+
208
197
$ response = new Response ();
209
198
$ listener ->onKernelResponse (new ResponseEvent ($ kernel , $ request , HttpKernelInterface::MAIN_REQUEST , $ response ));
199
+ $ this ->assertSame ($ sessionId , $ session ->getId ());
210
200
211
201
$ cookies = $ response ->headers ->getCookies ();
212
202
$ this ->assertCount (0 , $ cookies );
@@ -217,21 +207,18 @@ public function testSessionCookieNotWrittenCookieGiven()
217
207
*/
218
208
public function testSessionCookieClearedWhenInvalidated ()
219
209
{
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 ());
226
214
$ kernel = $ this ->createMock (HttpKernelInterface::class);
227
215
228
- $ request = new Request ();
229
216
$ listener ->onKernelRequest (new RequestEvent ($ kernel , $ request , HttpKernelInterface::MAIN_REQUEST ));
230
217
218
+ $ session = $ request ->getSession ();
231
219
$ session ->start ();
232
220
$ sessionId = $ session ->getId ();
233
221
$ this ->assertNotEmpty ($ sessionId );
234
- $ request ->cookies ->set ($ session ->getName (), $ sessionId );
235
222
$ _SESSION ['hello ' ] = 'world ' ; // check compatibility to php session bridge
236
223
237
224
$ session ->invalidate ();
@@ -252,21 +239,18 @@ public function testSessionCookieClearedWhenInvalidated()
252
239
*/
253
240
public function testSessionCookieNotClearedWhenOtherVariablesSet ()
254
241
{
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 ());
261
246
$ kernel = $ this ->createMock (HttpKernelInterface::class);
262
247
263
- $ request = new Request ();
264
248
$ listener ->onKernelRequest (new RequestEvent ($ kernel , $ request , HttpKernelInterface::MAIN_REQUEST ));
265
249
250
+ $ session = $ request ->getSession ();
266
251
$ session ->start ();
267
252
$ sessionId = $ session ->getId ();
268
253
$ this ->assertNotEmpty ($ sessionId );
269
- $ request ->cookies ->set ($ session ->getName (), $ sessionId );
270
254
$ _SESSION ['hello ' ] = 'world ' ;
271
255
272
256
$ response = new Response ();
@@ -281,17 +265,13 @@ public function testSessionCookieNotClearedWhenOtherVariablesSet()
281
265
*/
282
266
public function testSessionCookieSetWhenOtherNativeVariablesSet ()
283
267
{
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 ());
290
270
$ kernel = $ this ->createMock (HttpKernelInterface::class);
291
271
292
- $ request = new Request ();
293
272
$ listener ->onKernelRequest (new RequestEvent ($ kernel , $ request , HttpKernelInterface::MAIN_REQUEST ));
294
273
274
+ $ session = $ request ->getSession ();
295
275
$ session ->start ();
296
276
$ sessionId = $ session ->getId ();
297
277
$ this ->assertNotEmpty ($ sessionId );
@@ -756,4 +736,36 @@ public function testResetUnclosedSession()
756
736
$ this ->assertEmpty (session_id ());
757
737
$ this ->assertSame (\PHP_SESSION_NONE , session_status ());
758
738
}
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
+ }
759
771
}
0 commit comments