. */ namespace SP\Core\Crypt; use Defuse\Crypto\Exception\CryptoException; use SP\Core\Context\SessionContext; /** * Class Session * * @package SP\Core\Crypt */ final class Session { /** * Devolver la clave maestra de la sesión * * @param SessionContext $sessionContext * * @return string * @throws CryptoException */ public static function getSessionKey(SessionContext $sessionContext): string { return $sessionContext->getVault()->getData(self::getKey($sessionContext)); } /** * @param SessionContext $sessionContext * * @return string */ private static function getKey(SessionContext $sessionContext): string { return session_id() . $sessionContext->getSidStartTime(); } /** * Guardar la clave maestra en la sesión * * @param $data * @param SessionContext $sessionContext * * @throws CryptoException */ public static function saveSessionKey($data, SessionContext $sessionContext) { $sessionContext->setVault((new Vault())->saveData($data, self::getKey($sessionContext))); } /** * Regenerar la clave de sesión * * @param SessionContext $sessionContext * * @throws CryptoException */ public static function reKey(SessionContext $sessionContext) { logger(__METHOD__); $oldSeed = session_id() . $sessionContext->getSidStartTime(); session_regenerate_id(true); $newSeed = session_id() . $sessionContext->setSidStartTime(time()); $sessionContext->setVault($sessionContext->getVault()->reKey($newSeed, $oldSeed)); } }