Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

259
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!