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 \RequestEvent ;
28
30
use Symfony \Component \HttpKernel \Event \ResponseEvent ;
@@ -133,20 +135,8 @@ public function testPhpBridgeAlreadyStartedSession()
133
135
session_start ();
134
136
$ sessionId = session_id ();
135
137
136
- $ requestStack = new RequestStack ();
137
138
$ request = new Request ();
138
- $ requestStack ->push ($ request );
139
-
140
- $ session = new Session ();
141
- $ sessionStorage = new PhpBridgeSessionStorage ();
142
-
143
- $ container = new Container ();
144
- $ container ->set ('request_stack ' , $ requestStack );
145
- $ container ->set ('session ' , $ session );
146
- $ container ->set ('session_storage ' , $ sessionStorage );
147
-
148
- $ request = new Request ();
149
- $ listener = new SessionListener ($ container );
139
+ $ listener = $ this ->createListener ($ request , new PhpBridgeSessionStorageFactory ());
150
140
151
141
$ event = new RequestEvent ($ this ->createMock (HttpKernelInterface::class), $ request , HttpKernelInterface::MAIN_REQUEST );
152
142
@@ -161,17 +151,14 @@ public function testPhpBridgeAlreadyStartedSession()
161
151
*/
162
152
public function testSessionCookieWrittenNoCookieGiven ()
163
153
{
164
- $ session = new Session ();
165
- $ session ->set ('hello ' , 'world ' );
166
-
167
- $ container = new Container ();
168
- $ container ->set ('initialized_session ' , $ session );
154
+ $ request = new Request ();
155
+ $ listener = $ this ->createListener ($ request , new NativeSessionStorageFactory ());
169
156
170
- $ listener = new SessionListener ($ container );
171
157
$ kernel = $ this ->createMock (HttpKernelInterface::class);
172
158
173
- $ request = new Request ();
174
159
$ listener ->onKernelRequest (new RequestEvent ($ kernel , $ request , HttpKernelInterface::MAIN_REQUEST ));
160
+ $ session = $ request ->getSession ();
161
+ $ session ->set ('hello ' , 'world ' );
175
162
176
163
$ response = new Response ();
177
164
$ listener ->onKernelResponse (new ResponseEvent ($ kernel , $ request , HttpKernelInterface::MAIN_REQUEST , $ response ));
@@ -190,22 +177,25 @@ public function testSessionCookieWrittenNoCookieGiven()
190
177
*/
191
178
public function testSessionCookieNotWrittenCookieGiven ()
192
179
{
193
- $ session = new Session ();
194
- $ session ->set ('hello ' , 'world ' );
195
- $ sessionId = $ session ->getId ();
180
+ $ sessionId = $ this ->createValidSessionId ();
196
181
197
- $ container = new Container ();
198
- $ container ->set ('initialized_session ' , $ session );
199
-
200
- $ listener = new SessionListener ($ container );
201
- $ kernel = $ this ->createMock (HttpKernelInterface::class);
182
+ $ this ->assertNotEmpty ($ sessionId );
202
183
203
184
$ request = new Request ();
204
185
$ request ->cookies ->set ('PHPSESSID ' , $ sessionId );
186
+
187
+ $ listener = $ this ->createListener ($ request , new NativeSessionStorageFactory ());
188
+
189
+ $ kernel = $ this ->createMock (HttpKernelInterface::class);
205
190
$ listener ->onKernelRequest (new RequestEvent ($ kernel , $ request , HttpKernelInterface::MAIN_REQUEST ));
206
191
192
+ $ session = $ request ->getSession ();
193
+ $ this ->assertSame ($ sessionId , $ session ->getId ());
194
+ $ session ->set ('hello ' , 'world ' );
195
+
207
196
$ response = new Response ();
208
197
$ listener ->onKernelResponse (new ResponseEvent ($ kernel , $ request , HttpKernelInterface::MAIN_REQUEST , $ response ));
198
+ $ this ->assertSame ($ sessionId , $ session ->getId ());
209
199
210
200
$ cookies = $ response ->headers ->getCookies ();
211
201
$ this ->assertCount (0 , $ cookies );
@@ -216,21 +206,18 @@ public function testSessionCookieNotWrittenCookieGiven()
216
206
*/
217
207
public function testSessionCookieClearedWhenInvalidated ()
218
208
{
219
- $ session = new Session ();
220
-
221
- $ container = new Container ();
222
- $ container ->set ('initialized_session ' , $ session );
223
-
224
- $ listener = new SessionListener ($ container );
209
+ $ sessionId = $ this ->createValidSessionId ();
210
+ $ request = new Request ();
211
+ $ request ->cookies ->set ('PHPSESSID ' , $ sessionId );
212
+ $ listener = $ this ->createListener ($ request , new NativeSessionStorageFactory ());
225
213
$ kernel = $ this ->createMock (HttpKernelInterface::class);
226
214
227
- $ request = new Request ();
228
215
$ listener ->onKernelRequest (new RequestEvent ($ kernel , $ request , HttpKernelInterface::MAIN_REQUEST ));
229
216
217
+ $ session = $ request ->getSession ();
230
218
$ session ->start ();
231
219
$ sessionId = $ session ->getId ();
232
220
$ this ->assertNotEmpty ($ sessionId );
233
- $ request ->cookies ->set ($ session ->getName (), $ sessionId );
234
221
$ _SESSION ['hello ' ] = 'world ' ; // check compatibility to php session bridge
235
222
236
223
$ session ->invalidate ();
@@ -251,21 +238,18 @@ public function testSessionCookieClearedWhenInvalidated()
251
238
*/
252
239
public function testSessionCookieNotClearedWhenOtherVariablesSet ()
253
240
{
254
- $ session = new Session ();
255
-
256
- $ container = new Container ();
257
- $ container ->set ('initialized_session ' , $ session );
258
-
259
- $ listener = new SessionListener ($ container );
241
+ $ sessionId = $ this ->createValidSessionId ();
242
+ $ request = new Request ();
243
+ $ request ->cookies ->set ('PHPSESSID ' , $ sessionId );
244
+ $ listener = $ this ->createListener ($ request , new NativeSessionStorageFactory ());
260
245
$ kernel = $ this ->createMock (HttpKernelInterface::class);
261
246
262
- $ request = new Request ();
263
247
$ listener ->onKernelRequest (new RequestEvent ($ kernel , $ request , HttpKernelInterface::MAIN_REQUEST ));
264
248
249
+ $ session = $ request ->getSession ();
265
250
$ session ->start ();
266
251
$ sessionId = $ session ->getId ();
267
252
$ this ->assertNotEmpty ($ sessionId );
268
- $ request ->cookies ->set ($ session ->getName (), $ sessionId );
269
253
$ _SESSION ['hello ' ] = 'world ' ;
270
254
271
255
$ response = new Response ();
@@ -280,17 +264,13 @@ public function testSessionCookieNotClearedWhenOtherVariablesSet()
280
264
*/
281
265
public function testSessionCookieSetWhenOtherNativeVariablesSet ()
282
266
{
283
- $ session = new Session ();
284
-
285
- $ container = new Container ();
286
- $ container ->set ('initialized_session ' , $ session );
287
-
288
- $ listener = new SessionListener ($ container );
267
+ $ request = new Request ();
268
+ $ listener = $ this ->createListener ($ request , new NativeSessionStorageFactory ());
289
269
$ kernel = $ this ->createMock (HttpKernelInterface::class);
290
270
291
- $ request = new Request ();
292
271
$ listener ->onKernelRequest (new RequestEvent ($ kernel , $ request , HttpKernelInterface::MAIN_REQUEST ));
293
272
273
+ $ session = $ request ->getSession ();
294
274
$ session ->start ();
295
275
$ sessionId = $ session ->getId ();
296
276
$ this ->assertNotEmpty ($ sessionId );
@@ -783,4 +763,36 @@ public function testResetUnclosedSession()
783
763
$ this ->assertEmpty (session_id ());
784
764
$ this ->assertSame (\PHP_SESSION_NONE , session_status ());
785
765
}
766
+
767
+ private function createListener (Request $ request , SessionStorageFactoryInterface $ sessionFactory )
768
+ {
769
+ $ requestStack = new RequestStack ();
770
+ $ request = new Request ();
771
+ $ requestStack ->push ($ request );
772
+
773
+ $ sessionFactory = new SessionFactory (
774
+ $ requestStack ,
775
+ $ sessionFactory ,
776
+ );
777
+
778
+ $ container = new Container ();
779
+ $ container ->set ('request_stack ' , $ requestStack );
780
+ $ container ->set ('session_factory ' , $ sessionFactory );
781
+
782
+ $ listener = new SessionListener ($ container );
783
+
784
+ return new SessionListener ($ container );
785
+ }
786
+
787
+ private function createValidSessionId (): string
788
+ {
789
+ session_start ();
790
+ $ sessionId = session_id ();
791
+ $ _SESSION ['some ' ] = 'value ' ;
792
+ session_write_close ();
793
+ $ _SESSION = [];
794
+ session_abort ();
795
+
796
+ return $ sessionId ;
797
+ }
786
798
}
0 commit comments