@@ -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.
@@ -137,13 +137,13 @@ public function onKernelRequest(UserContextRequestEvent $event)
137
137
}
138
138
139
139
$ request = $ event ->getRequest ();
140
+
141
+ // Return early if request is not a hash lookup
140
142
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 ();
143
+ if ($ request ->headers ->has ($ this ->options ['user_hash_header ' ])) {
144
+ // Keep track of if user is anonymous when we have user hash header in request
145
+ $ this ->wasAnonymous = $ this ->isAnonymous ($ request );
145
146
}
146
-
147
147
return ;
148
148
}
149
149
@@ -202,11 +202,17 @@ 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
+ if (!$ this ->wasAnonymous || !$ this ->isAnonymous ($ request )) {
212
+ $ hash = $ this ->hashGenerator ->generateHash ();
213
+ }
214
+
215
+ if (null !== $ hash && $ hash !== $ requestHash ) {
210
216
// hash has changed, session has most certainly changed, prevent setting incorrect cache
211
217
$ response ->setCache ([
212
218
'max_age ' => 0 ,
0 commit comments