Helpers – Session – $_SESSION
En la sesión es donde guardamos los datos que queremos preservar mientras el usuario navega por la aplicación. Con estas funciones podremos obtener y guardar datos de la variable superglobal $·_SESSION.
Los valores se guardan serializados. Se puede inicializar nuevas sesiones o recargar otras sesiones mediante su identificador.
/** * HeleprSession.php * @author Code Develium */ namespace Helpers; /** * Class HeleprSession */ abstract class HelpSession { /** * Guarda un valor en la sesión. * El valor es guardado en la sesion de forma serializada. * * @param string $clave * @param object $valor */ public static function setValue($clave, $valor = null) { $_SESSION[ $clave ] = serialize($valor); } /** * Inicia una sessión * * @param string|null $sessionId */ public static function init($sessionId = null): void { /* Comprobar que no haya una sesión ya iniciada */ if ( PHP_SESSION_NONE == session_status()) { if (!empty($sessionId)) { session_id($sessionId); } session_start(); return; } if (!empty($sessionId) && $sessionId != session_id()) { session_destroy(); session_id($sessionId); session_start(); } } /** * Devuelve un valor guardado en la sesión. * Si no esta definido devuelve null. * El valor es guardado en la sesion de forma serializada. * * @param string $clave * * @return mixed */ public static function getValue( $clave) { if (!isset($_SESSION[ $clave ])) { alert("Valor $clave no existe en $_SESSION"); return null; } return unserialize($_SESSION[ $clave ]); } /** * Devuelve un valor guardado en la sesión como un string. * Si no esta definido devuelve null. * El valor es guardado en la sesion de forma serializada * * @param string $clave * * @return string */ public static function getString($clave) { if (!isset($_SESSION[ $clave ])) { alert("Valor $clave no existe en $_SESSION"); return null; } return strval(unserialize($_SESSION[ $clave ])); } /** * Si no esta definido devuelve null * El valor es guardado en la sesion de forma serializada. * Si no es un valor numérico, lanza una alert. * * @param string $clave * * @return int */ public static function getInt($clave) { if (!isset($_SESSION[ $clave ])) { alert("Valor $clave no existe en $_SESSION"); return null; } $tmpInt = unserialize($_SESSION[ $clave ]); if (!is_numeric($tmpInt)) { alert("Valor SESSION no es un integer: $clave = $tmpInt"); return $tmpInt; } return intval($tmpInt); } /** * Devuelve un valor guardado en la sesión como un bool. * Si no esta definido devuelve null. * El valor es guardado en la sesion de forma serializada. * Si no es un valor bool, lanza una alert. * * @param string $clave * * @return bool */ public static function getBool($clave) { if (!isset($_SESSION[ $clave ])) { alert("Valor $clave no existe en $_SESSION"); return null; } $tmpBool = unserialize($_SESSION[ $clave ]); if (!is_bool($tmpBool)) { alert("Valor SESSION no es un bool: $clave = $tmpBool"); return $tmpBool; } return boolval($tmpBool); } /** * Destruye la sesion */ public static function destroy(): void { /* Comprobar si la sesión está iniciada */ if ( PHP_SESSION_ACTIVE == session_status()) { session_destroy(); session_unset(); } } /** * Elimina un valor guardado en la sessión * * @param string $clave */ public static function removeValue($clave) { unset($_SESSION[ $clave ]); } /** * Comprobar si la sessión esta caducada. * Si despues de N minutos, no ha habido una recarga, se destruye * la sesión. * Cada recarga de sessión se actualiza el tiempo. */ public static function isTimeOut(): void { /* Comprobar que el usuario esta autenticado */ $minutosExpiracion = 30; // Sólo si hay caducidad y esta logeado if ( $minutosExpiracion > 0) { //&& !empty(App::$Usuario) && //App::$Usuario->usuario_id > 0) { $fechaUltimaAccion = self::getValue('_ULTIMA_ACCION_'); /* Existe control de tiempo */ if (!empty($fechaUltimaAccion)) { // Tiempo de inactividad $segundosInactivo = time() - $fechaUltimaAccion; // Segundos de timeout $expirarDespuesDe = $minutosExpiracion * 60; if ($segundosInactivo >= $expirarDespuesDe) { // Sesión caducada session_destroy(); // redireccionar a otra página die(); } } self::setValue('_ULTIMA_ACCION_', time()); } } }