Advertisement
Guest User

Untitled

a guest
Aug 20th, 2016
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.32 KB | None | 0 0
  1. <?php
  2. //Evitamos que nos salgan los NOTICES de PHP
  3. error_reporting(E_ALL ^ E_NOTICE);
  4.  
  5. //Obtenemos el timestamp del servidor de cuanto se hizo la petición
  6. $hora = $_SERVER["REQUEST_TIME"];
  7. require('conexion.php');
  8.  
  9.  
  10. //Duración de la sesión en segundos
  11. $duracion = 9000;
  12. //Si el tiempo de la petición* es mayor al tiempo permitido de la duración,
  13. //destruye la sesión y crea una nueva
  14.  
  15.  
  16.  
  17.  
  18. if (isset($_SESSION['ultima_actividad']) && ($hora - $_SESSION['ultima_actividad']) > $duracion) {
  19. session_unset();
  20. session_destroy();
  21. // session_start();
  22. };
  23. // * Por esto este archivo debe ser incluido en cada página que necesite comprobar las sesiones
  24.  
  25. //Definimos el valor de la sesión "ultima_actividad" como el timestamp del servidor
  26. $_SESSION['ultima_actividad'] = $hora;
  27. ?>
  28.  
  29. //Conectamos a la base de datos
  30. require('../../config/conexion.php');
  31.  
  32.  
  33. //Obtenemos los datos del formulario de acceso
  34. $userPOST = $_POST["idUsuario"];
  35. $passPOST = $_POST["idPass"];
  36.  
  37. //Filtro anti-XSS Seguridad
  38. $userPOST = htmlspecialchars(mysqli_real_escape_string($conexion, $userPOST));
  39. $passPOST = htmlspecialchars(mysqli_real_escape_string($conexion, $passPOST));
  40.  
  41. //Definimos la cantidad máxima de caracteres
  42. //Esta comprobación se tiene en cuenta por si se llegase a modificar el "maxlength" del formulario
  43. //Los valores deben coincidir con el tamaño máximo de la fila de la base de datos
  44. $maxCaracteresUsername = "20";
  45. $maxCaracteresPassword = "60";
  46.  
  47. //Si los input son de mayor tamaño, se "muere" el resto del código y muestra la respuesta correspondiente
  48. if(strlen($userPOST) > $maxCaracteresUsername) {
  49. die('El nombre de usuario no puede superar los '.$maxCaracteresUsername.' caracteres');
  50. };
  51.  
  52. if(strlen($passPOST) > $maxCaracteresPassword) {
  53. die('La contraseña no puede superar los '.$maxCaracteresPassword.' caracteres');
  54. };
  55.  
  56. //Pasamos el input del usuario a minúsculas para compararlo después con
  57. //el campo "usernamelowercase" de la base de datos
  58. // $userPOSTMinusculas = strtolower($userPOST);
  59.  
  60. //Escribimos la consulta necesaria
  61. // $consulta = "SELECT * FROM `users` WHERE usernamelowercase='".$userPOSTMinusculas."'";
  62.  
  63. //Consulta normal sin pedir comprobaciones de minusculas o mayusculas.
  64. $consulta = "SELECT * FROM `users` WHERE username='".$userPOST."'";
  65.  
  66.  
  67. //Obtenemos los resultados
  68. $resultado = mysqli_query($conexion, $consulta) or die ("Query problem");
  69. $datos = mysqli_fetch_array($resultado);
  70.  
  71. //Guardamos los resultados del nombre de usuario normal, no en minúsculas
  72. //y de la contraseña de la base de datos
  73. $userBD = $datos['username'];
  74. $passwordBD = $datos['password'];
  75.  
  76. //Comprobamos si los datos son correctos
  77. // if($userBD == $userPOSTMinusculas and password_verify($passPOST, $passwordBD)){
  78. if($userBD == $userPOST and $passPOST == $passwordBD){
  79. date_default_timezone_set('America/Chihuahua');
  80. // die($parsedDate); //2016-08-18 22:54:33
  81. //CrearFuncion para la diferencia en las fechas y el accesso en si para no repetir procedimientos...
  82. //Funciones o declaraciones repetidas deberan ser incluidas en esta clase*****************************************
  83.  
  84.  
  85. $time = date('Y-m-d H:i:s');
  86. $time_dt = new DateTime($time);
  87. $databasetime_dt = new DateTime($datos['lastActivity']);
  88. //*******************************OBTENER DIFERENCIAS EN LAS FECHAS. ENTRE EL TIEMPO ACTUAL Y LA HORA QUE SE REGISTRA EN LA BASE DE DATOS.
  89. $interval = $databasetime_dt->diff($time_dt);
  90. // die($interval->format('%Y'));
  91.  
  92. if($datos['logged'] == 0){
  93.  
  94. session_id($datos['id']);
  95. session_start();
  96. $_SESSION['id'] = $datos['id'];
  97. $_SESSION['usuario'] = $datos['username'];
  98. $_SESSION['estado'] = 'Autenticado';
  99. // ***********************************************************************************//
  100. //SE GENERA UN UPDATE PARA CONFIRMAR QUE EL USUARIO ESTE LOGUEADO, SI LO ESTA, NO PODRA TENER MAS DE UNA SESION ACTIVA CON UN UPDATE EN LA HORA DE ACCESO//
  101. $consultaActivo = "UPDATE users SET logged = 1, lastActivity ='".$time."' WHERE id=".$datos['id'];
  102. $resultadoActivo = mysqli_query($conexion, $consultaActivo);
  103. echo 'Hecho';
  104.  
  105. }else{
  106. if($interval->format('%Y') >= 1){
  107. session_id($datos['id']);
  108. session_start();
  109. $_SESSION['id'] = $datos['id'];
  110. $_SESSION['usuario'] = $datos['username'];
  111. $_SESSION['estado'] = 'Autenticado';
  112. echo 'Hecho';
  113. // die("Uno o mas años de diferencia");
  114. }else{
  115. if($interval->format('%m') >= 1){
  116. session_id($datos['id']);
  117. session_start();
  118. $_SESSION['id'] = $datos['id'];
  119. $_SESSION['usuario'] = $datos['username'];
  120. $_SESSION['estado'] = 'Autenticado';
  121. echo 'Hecho';
  122. // die("Uno o mas meses de diferencia");
  123. }else{
  124. if($interval->format('%d') >= 1){
  125. session_id($datos['id']);
  126. session_start();
  127. $_SESSION['id'] = $datos['id'];
  128. $_SESSION['usuario'] = $datos['username'];
  129. $_SESSION['estado'] = 'Autenticado';
  130. echo 'Hecho';
  131. // die("Uno o mas dias de diferencia");
  132. }else{
  133. if($interval->format('%H') >=1){
  134. session_id($datos['id']);
  135. session_start();
  136. $_SESSION['id'] = $datos['id'];
  137. $_SESSION['usuario'] = $datos['username'];
  138. $_SESSION['estado'] = 'Autenticado';
  139. echo 'Hecho';
  140. // die("Una o mas hora de diferencia");
  141. }else{
  142. if($interval->format('%i') > 10){
  143. session_id($datos['id']);
  144. session_start();
  145. $_SESSION['id'] = $datos['id'];
  146. $_SESSION['usuario'] = $datos['username'];
  147. $_SESSION['estado'] = 'Autenticado';
  148. echo 'Hecho';
  149. }
  150. else{
  151. echo 'SesionActiva';
  152. }
  153. }
  154. }
  155. }
  156. }
  157. }
  158.  
  159. /* Sesión iniciada, si se desea, se puede redireccionar desde el servidor */
  160.  
  161. //Si los datos no son correctos, o están vacíos, muestra un error
  162. //Además, hay un script que vacía los campos con la clase "acceso" (formulario)
  163. // } else if ( $userBD != $userPOSTMinusculas || $userPOST == "" || $passPOST == "" || !password_verify($passPOST, $passwordBD) ) {
  164. } else if ( $userBD != $userPOST || $userPOST == "" || $passPOST == "" || !password_verify($passPOST, $passwordBD) ) {
  165. // die ('<script>$(".input-group-addon").val("");</script>');
  166. echo "Datos erroneos";
  167. } else {
  168. die('Error');
  169. };
  170. ?>
  171.  
  172. <?php
  173. //Reanudamos la sesión
  174. session_start();
  175.  
  176. //Requerimos los datos de la conexión a la BBDD
  177. require('../../config/conexion.php');
  178.  
  179. $consultaActivo = "UPDATE `users` SET logged=0 WHERE id=".$_SESSION['id'];
  180. $resultadoActivo = mysqli_query($conexion, $consultaActivo);
  181.  
  182. //Des-establecemos todas las sesiones
  183. unset($_SESSION);
  184.  
  185. //Destruimos las sesiones
  186. session_destroy();
  187.  
  188. //Cerramos la conexión con la base de datos
  189. mysqli_close($conexion);
  190.  
  191. //Redireccionamos a el index
  192. header("Location: ../../");
  193. return true;
  194. die();
  195. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement