File tree 2 files changed +29
-1
lines changed
2 files changed +29
-1
lines changed Original file line number Diff line number Diff line change @@ -29,17 +29,28 @@ class Store implements StoreInterface
29
29
private $ keyCache ;
30
30
/** @var array<string, resource> */
31
31
private $ locks = [];
32
+ private $ options ;
32
33
33
34
/**
35
+ * Constructor.
36
+ *
37
+ * The available options are:
38
+ *
39
+ * * private_headers Set of response headers that should not be stored
40
+ * when a response is cached. (default: Set-Cookie)
41
+ *
34
42
* @throws \RuntimeException
35
43
*/
36
- public function __construct (string $ root )
44
+ public function __construct (string $ root, array $ options = [] )
37
45
{
38
46
$ this ->root = $ root ;
39
47
if (!is_dir ($ this ->root ) && !@mkdir ($ this ->root , 0777 , true ) && !is_dir ($ this ->root )) {
40
48
throw new \RuntimeException (sprintf ('Unable to create the store directory (%s). ' , $ this ->root ));
41
49
}
42
50
$ this ->keyCache = new \SplObjectStorage ();
51
+ $ this ->options = array_merge ([
52
+ 'private_headers ' => ['Set-Cookie ' ],
53
+ ], $ options );
43
54
}
44
55
45
56
/**
@@ -216,6 +227,10 @@ public function write(Request $request, Response $response)
216
227
$ headers = $ this ->persistResponse ($ response );
217
228
unset($ headers ['age ' ]);
218
229
230
+ foreach ($ this ->options ['private_headers ' ] as $ h ) {
231
+ unset($ headers [strtolower ($ h )]);
232
+ }
233
+
219
234
array_unshift ($ entries , [$ storedEnv , $ headers ]);
220
235
221
236
if (!$ this ->save ($ key , serialize ($ entries ))) {
Original file line number Diff line number Diff line change 12
12
namespace Symfony \Component \HttpKernel \Tests \HttpCache ;
13
13
14
14
use PHPUnit \Framework \TestCase ;
15
+ use Symfony \Component \HttpFoundation \Cookie ;
15
16
use Symfony \Component \HttpFoundation \Request ;
16
17
use Symfony \Component \HttpFoundation \Response ;
18
+ use Symfony \Component \HttpKernel \HttpCache \HttpCache ;
17
19
use Symfony \Component \HttpKernel \HttpCache \Store ;
18
20
19
21
class StoreTest extends TestCase
@@ -317,6 +319,17 @@ public function testPurgeHttpAndHttps()
317
319
$ this ->assertEmpty ($ this ->getStoreMetadata ($ requestHttps ));
318
320
}
319
321
322
+ public function testDoesNotStorePrivateHeaders ()
323
+ {
324
+ $ request = Request::create ('https://example.com/foo ' );
325
+ $ response = new Response ('foo ' );
326
+ $ response ->headers ->setCookie (Cookie::fromString ('foo=bar ' ));
327
+
328
+ $ this ->store ->write ($ request , $ response );
329
+ $ this ->assertArrayNotHasKey ('set-cookie ' , $ this ->getStoreMetadata ($ request )[0 ][1 ]);
330
+ $ this ->assertNotEmpty ($ response ->headers ->getCookies ());
331
+ }
332
+
320
333
protected function storeSimpleEntry ($ path = null , $ headers = [])
321
334
{
322
335
if (null === $ path ) {
You can’t perform that action at this time.
0 commit comments