. */ namespace SP\Core\Crypt; use SP\Core\Exceptions\CryptException; use SP\Domain\Core\Context\SessionContextInterface; use function SP\logger; /** * Class Session * * @package SP\Core\Crypt */ class Session { /** * Devolver la clave maestra de la sesión * * @throws CryptException */ public static function getSessionKey(SessionContextInterface $sessionContext): string { return $sessionContext->getVault()->getData(self::getKey($sessionContext)); } private static function getKey(SessionContextInterface $sessionContext): string { return session_id() . $sessionContext->getSidStartTime(); } /** * Guardar la clave maestra en la sesión * * @throws CryptException */ public static function saveSessionKey(string $data, SessionContextInterface $sessionContext): void { $sessionContext->setVault(Vault::factory(new Crypt())->saveData($data, self::getKey($sessionContext))); } /** * Regenerar la clave de sesión * * @throws CryptException */ public static function reKey(SessionContextInterface $sessionContext): void { logger(__METHOD__); $oldSeed = sprintf("%s%s", session_id(), $sessionContext->getSidStartTime()); session_regenerate_id(true); $newSeed = sprintf("%s%s", session_id(), $sessionContext->setSidStartTime(time())); $sessionContext->setVault($sessionContext->getVault()->reKey($newSeed, $oldSeed)); } }