ValidaSesion.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <?php
  2. /**
  3. * Clase para validar la sesión del usuario y que el usuario esté activo.
  4. *
  5. * @author Alejandro
  6. */
  7. class ValidaSesion {
  8. private $acceso, $edicion;//guarda si el usuario puede acceder y/o editar
  9. private $error, $hasError = false;
  10. /**
  11. * Constructor
  12. *
  13. * @param object $pdo Conexión activa a base de datos a través de PDO
  14. * @param int $submenu ID del submenú que se busca
  15. * @return boolean
  16. */
  17. function __construct($pdo, $submenu){
  18. if (session_status() == PHP_SESSION_NONE) {
  19. session_start();
  20. }
  21. $session_life = 1*60*60;//1 hora convertido a segundos
  22. // check to see if $_SESSION["timeout"] is set
  23. if (isset($_SESSION['timeout'])) {
  24. // calculate the session's "time to live"
  25. $sessionTTL = time() - $_SESSION['timeout'];
  26. if ($sessionTTL > $session_life) {
  27. $this->terminaSesion();
  28. }
  29. }else
  30. $this->terminaSesion();
  31. $_SESSION['timeout'] = time();
  32. if(!isset($_SESSION['usuario_id']) || $_SESSION['usuario_id'] == '') $this->terminaSesion();
  33. //existe id en sesión?
  34. if(array_key_exists('usuario_id', $_SESSION) && is_numeric($_SESSION['usuario_id']) && $_SESSION['usuario_id'] > 0){
  35. if(is_int($submenu)){
  36. //valida permisos
  37. $stmt = $pdo->prepare('Select * from cidit_fs_validapermisos(:usr, :sub)');//devuelve: permiso, edicion
  38. $stmt->bindParam(':usr', $_SESSION['usuario_id']);
  39. $stmt->bindParam(':sub', $submenu);
  40. if(!$stmt->execute()){
  41. $this->hasError = true;
  42. $this->error = $stmt->errorInfo();
  43. }else{
  44. $rs = $stmt->fetch();
  45. $stmt->closeCursor();
  46. $stmt = null;
  47. $this->acceso = (bool) $rs['permiso'];
  48. $this->edicion = (bool) $rs['edicion'];
  49. $rs = null;
  50. }
  51. } else {
  52. $this->hasError = true;
  53. $this->error = 'Dato no válido en validación de permisos';
  54. }
  55. } else{
  56. $this->error = 'No existe la llave en sesión';
  57. $this->hasError = true;
  58. $this->acceso = false;
  59. $this->edicion = false;
  60. }
  61. if($this->hasError){
  62. $this->acceso = false;
  63. $this->edicion = false;
  64. }
  65. }
  66. function tieneAcceso(){
  67. return $this->acceso;
  68. }
  69. function puedeEditar(){
  70. return $this->acceso && $this->edicion;
  71. }
  72. function tieneError(){
  73. return $this->hasError;
  74. }
  75. function getError(){
  76. return $this->error;
  77. }
  78. function terminaSesion(){
  79. $_SESSION = array();
  80. session_destroy();
  81. //$pag = $this->getFirstDirectory($_SERVER['PHP_SELF'])."/salir.php?expired=1";
  82. $pag = $_SERVER['SERVER_NAME'] . 'salir.php?expired=1';
  83. //header('Location: http://' . $pag);
  84. header('Location: salir.php?expired=1');
  85. exit();
  86. }
  87. public static function salirPagina(){
  88. $_SESSION = array();
  89. session_destroy();
  90. header('Location: salir.php');
  91. exit();
  92. }
  93. }