public function terminateSession($entityId, $nameId, $nameIdFormat, $sessionIndex = null)
 {
     $ssoState = $this->ssoStateStore->get();
     $count = 0;
     $ssoState->modify(function (SsoSessionState $session) use($entityId, $nameId, $nameIdFormat, &$count) {
         if (($session->getIdpEntityId() == $entityId || $session->getSpEntityId() == $entityId) && $session->getNameId() == $nameId && $session->getNameIdFormat() == $nameIdFormat) {
             ++$count;
             return false;
         }
         return true;
     });
     $this->ssoStateStore->set($ssoState);
     return $count;
 }
 /**
  * @param Assertion[] $assertions
  * @param string      $ownEntityId
  * @param string      $partyEntityId
  */
 public function processAssertions(array $assertions, $ownEntityId, $partyEntityId)
 {
     $now = $this->timeProvider->getDateTime()->setTimezone(new \DateTimeZone('GMT'));
     $ssoState = $this->ssoStateStore->get();
     foreach ($assertions as $assertion) {
         if ($assertion instanceof Assertion) {
             if ($this->supportsSession($assertion)) {
                 $this->checkSession($ownEntityId, $partyEntityId, $ssoState, $assertion, $now);
             }
         } else {
             throw new \InvalidArgumentException('Expected Assertion');
         }
     }
     $this->ssoStateStore->set($ssoState);
 }