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