Session.php 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. namespace App\Core;
  3. /*
  4. * Gestiona las variables de
  5. * sesión de la aplicación.
  6. */
  7. class Session
  8. {
  9. protected const GLOBAL_KEY = 'global_data';
  10. protected const FLASH_KEY = 'flash_data';
  11. public function __construct()
  12. {
  13. session_start();
  14. $_SESSION[self::GLOBAL_KEY] = $_SESSION[self::GLOBAL_KEY] ?? [];
  15. $_SESSION[self::FLASH_KEY] = $_SESSION[self::FLASH_KEY] ?? [];
  16. /*
  17. * Establece la bandera de eliminación de todas
  18. * las variables de sesión de una sola petición.
  19. */
  20. foreach ($_SESSION[self::FLASH_KEY] as $key => $flashData) {
  21. $_SESSION[self::FLASH_KEY][$key]['remove'] = true;
  22. }
  23. }
  24. /*
  25. * Establece una variable de sesión.
  26. */
  27. public function set(string $key, $data)
  28. {
  29. $_SESSION[self::GLOBAL_KEY][$key] = $data;
  30. }
  31. /*
  32. * Obtiene una variable de sesión.
  33. */
  34. public function get(string $key)
  35. {
  36. return $_SESSION[self::GLOBAL_KEY][$key] ?? null;
  37. }
  38. /*
  39. * Elimina una variable de sesión.
  40. */
  41. public function remove(string $key)
  42. {
  43. unset($_SESSION[self::GLOBAL_KEY][$key]);
  44. }
  45. /*
  46. * Establece una variable de sesión de una sola petición.
  47. */
  48. public function setFlash(string $key, $data)
  49. {
  50. $_SESSION[self::FLASH_KEY][$key] = [
  51. 'remove' => false,
  52. 'value' => $data,
  53. ];
  54. }
  55. /*
  56. * Obtiene una variable de sesión de una sola petición.
  57. */
  58. public function getFlash(string $key)
  59. {
  60. return $_SESSION[self::FLASH_KEY][$key]['value'] ?? null;
  61. }
  62. public function __destruct()
  63. {
  64. /*
  65. * Elimina todas las variables de sesión de una
  66. * sola petición al finalizar la aplicación.
  67. */
  68. foreach ($_SESSION[self::FLASH_KEY] ?? [] as $key => $flashData) {
  69. if ($flashData['remove']) {
  70. unset($_SESSION[self::FLASH_KEY][$key]);
  71. }
  72. }
  73. }
  74. }