diff --git a/core/lib/Drupal/Core/Session/PermissionsHashGenerator.php b/core/lib/Drupal/Core/Session/PermissionsHashGenerator.php
index f176afd..e421ff6 100644
--- a/core/lib/Drupal/Core/Session/PermissionsHashGenerator.php
+++ b/core/lib/Drupal/Core/Session/PermissionsHashGenerator.php
@@ -33,6 +33,11 @@ class PermissionsHashGenerator implements PermissionsHashGeneratorInterface {
   protected $cache;
 
   /**
+   * The permissions hashes.
+   */
+  protected $hashes = [];
+
+  /**
    * Constructs a PermissionsHashGenerator object.
    *
    * @param \Drupal\Core\PrivateKey $private_key
@@ -54,13 +59,19 @@ public function generate(AccountInterface $account) {
     $sorted_roles = $account->getRoles();
     sort($sorted_roles);
     $role_list = implode(',', $sorted_roles);
-    if ($cache = $this->cache->get("user_permissions_hash:$role_list")) {
-      $permissions_hash = $cache->data;
+    if (isset($this->hashes[$role_list])) {
+      return $this->hashes[$role_list];
     }
     else {
-      $permissions_hash = $this->doGenerate($sorted_roles);
-      $tags = Cache::buildTags('config:user.role', $sorted_roles, '.');
-      $this->cache->set("user_permissions_hash:$role_list", $permissions_hash, Cache::PERMANENT, $tags);
+      if ($cache = $this->cache->get("user_permissions_hash:$role_list")) {
+        $permissions_hash = $cache->data;
+      }
+      else {
+        $permissions_hash = $this->doGenerate($sorted_roles);
+        $tags = Cache::buildTags('config:user.role', $sorted_roles, '.');
+        $this->cache->set("user_permissions_hash:$role_list", $permissions_hash, Cache::PERMANENT, $tags);
+      }
+      $this->hashes[$role_list] = $permissions_hash;
     }
 
     return $permissions_hash;
