@@ -78,9 +78,9 @@ class UserContextListener implements EventSubscriberInterface
78
78
private $ hasSessionListener ;
79
79
80
80
/**
81
- * @var string
81
+ * @var bool
82
82
*/
83
- private $ hash ;
83
+ private $ wasAnonymous ;
84
84
85
85
/**
86
86
* Used to exclude anonymous requests (no authentication nor session) from user hash sanity check.
@@ -138,12 +138,12 @@ public function onKernelRequest(UserContextRequestEvent $event)
138
138
139
139
$ request = $ event ->getRequest ();
140
140
if (!$ this ->requestMatcher ->matches ($ request )) {
141
- if ($ event ->getRequest ()->headers ->has ($ this ->options ['user_hash_header ' ])
142
- && !$ this ->isAnonymous ($ event ->getRequest ())
143
- ) {
144
- $ this ->hash = $ this ->hashGenerator ->generateHash ();
141
+ if ($ request ->headers ->has ($ this ->options ['user_hash_header ' ])) {
142
+ // Keep track of if user is anonymous when we have user hash header in request
143
+ $ this ->wasAnonymous = $ this ->isAnonymous ($ request );
145
144
}
146
145
146
+ // Return early if request is not a hash lookup
147
147
return ;
148
148
}
149
149
@@ -202,11 +202,18 @@ public function onKernelResponse(UserContextResponseEvent $event)
202
202
203
203
$ response = $ event ->getResponse ();
204
204
$ request = $ event ->getRequest ();
205
-
206
205
$ vary = $ response ->getVary ();
207
206
208
207
if ($ request ->headers ->has ($ this ->options ['user_hash_header ' ])) {
209
- if (null !== $ this ->hash && $ this ->hash !== $ request ->headers ->get ($ this ->options ['user_hash_header ' ])) {
208
+ $ requestHash = $ request ->headers ->get ($ this ->options ['user_hash_header ' ]);
209
+
210
+ // Generate hash to see if it might have changed during request if user was, or is "logged in" (session)
211
+ // But only needed if user was, or is, logged in
212
+ if (!$ this ->wasAnonymous || !$ this ->isAnonymous ($ request )) {
213
+ $ hash = $ this ->hashGenerator ->generateHash ();
214
+ }
215
+
216
+ if (isset ($ hash ) && $ hash !== $ requestHash ) {
210
217
// hash has changed, session has most certainly changed, prevent setting incorrect cache
211
218
$ response ->setCache ([
212
219
'max_age ' => 0 ,
0 commit comments