[#8579] set Clear-Site-Data response header upon logout to clear cookies and storage
diff --git a/Allura/allura/lib/plugin.py b/Allura/allura/lib/plugin.py
index bdb7ecd..2e9e427 100644
--- a/Allura/allura/lib/plugin.py
+++ b/Allura/allura/lib/plugin.py
@@ -313,6 +313,8 @@ def logout(self):
         self.session.invalidate()
         self.session.save()
         response.set_cookie('memorable_forget', '/', secure=request.environ['beaker.session'].secure)
+        # signal to browser to clear saved data
+        response.headers['Clear-Site-Data'] = '"cookies", "storage"'
 
     def validate_password(self, user: M.User, password: str) -> bool:
         ok = self._validate_password(user, password)
diff --git a/Allura/allura/tests/functional/test_auth.py b/Allura/allura/tests/functional/test_auth.py
index c0d3e7f..80fd267 100644
--- a/Allura/allura/tests/functional/test_auth.py
+++ b/Allura/allura/tests/functional/test_auth.py
@@ -274,7 +274,10 @@ def test_logout(self):
         links = r.html.find(*nav_pattern).find_all('a')
         assert links[-1].string == "Log Out"
 
-        r = self.app.get('/auth/logout').follow().follow()
+        r = self.app.get('/auth/logout')
+        assert 'Clear-Site-Data' in r.headers
+
+        r = r.follow().follow()
         logged_out_session = r.session['_id']
         assert logged_in_session is not logged_out_session
         links = r.html.find(*nav_pattern).find_all('a')