Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

260
Vistas
¿Cómo evitar el doble inicio de sesión en PHP?

Estoy creando un sistema donde el objetivo es que solo una persona por usuario pueda acceder al sistema, para esto tengo en mi base de datos dos tablas llamadas: usuarios y accesos Lo que estoy haciendo es que cuando la persona 1 inicie sesión, se guarde en mi DB la identificación de la sesión en las dos tablas, si la persona 2 con el mismo usuario intenta acceder, la primera persona que inicia sesión lo saca del sistema. Hago esto con la ayuda de AJAX, comparando si el último usuario que inició tiene la misma identificación de sesión, entonces puede navegar sin problema, si no cierra la sesión.

El problema es que hago esta solicitud ajax cada 10 segundos, pero tendría problemas si 10,000 personas o más inician sesión, entonces la solicitud se enviará al servidor cada 10 segundos y esto podría saturar el servidor.

Pruebe con un campo activo si la sesión es igual a 1 y si la sesión es igual a 0, entonces descarte esto ya que si el usuario cierra el navegador, nunca cierro la sesión y la persona no podrá acceder, también probé usando un método ajax para detectar si cierras el navegador pero no es muy fiable. ¿Alguien ha tenido el mismo problema? te lo agradeceria mucho

Dejo mi código php y js para mostrar como lo hago:

Código JS:

 $(function() { cron(); // Lanzo cron la primera vez function cron() { $.ajax({ method: "POST", url: "closeuser.php", data: { action: 1 } }) .done(function(msg) { var trimmedString = msg.trim(); console.log(trimmedString) if( trimmedString == 'success' ) { // Valida si el server devolvió 'success' location.href='logoutuser.php'; } }); } setInterval(function() { cron(); }, 10000); // cada 10 segundos });

Codigo PHP:

 <?php require_once 'Connections/sesionunica.php'; $connection_s = new sesionunica(); if(!isset($_SESSION["id_user"])){ echo"<script>location.href='index.php';</script>"; } if(isset($_POST["action"])) { // Se pasa una acción switch(sprintf("%d", $_POST["action"])) { // ¿Qué acción? case 1: cerrar(); break; default: echo "default"; } } function cerrar(){ $ses = session_id(); $connection_s = new sesionunica(); $userById = $connection_s->getUsers($_SESSION["id_user"]); if ($userById["id_sesion"] <> $ses) { echo "success"; } } ?>

De igual manera no puedo usar websockets ya que hay problemas de accesibilidad con el servidor.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Creo que podría crear un "filtro de acceso" que verificaría si el "token de acceso" es válido o no en cada solicitud que harían los usuarios.

Si el "token de acceso" está vencido, devuelva un estado HTTP 401 (no autorizado) y, en el lado del cliente, redirija al usuario a la página de inicio de sesión.

El filtro de solicitud es un recurso muy común que tienen muchos marcos REST.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda