Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

204
Visualizações
¿Hay un retraso en la configuración de las variables de sesión? fallando solo en el primer intento

Tengo una página, login.php, que procesa un nombre de usuario y una contraseña y, si tiene éxito, establece variables de sesión y luego redirige al usuario a home.php. La parte relevante de login.php está aquí:

 if ($pwdHash == $storedpass) { $success = true; $sessionStatus = session_status(); if ($sessionStatus !== PHP_SESSION_ACTIVE) { session_start(); } $_SESSION['user_id'] = $user; $_SESSION['logged_in'] = true; session_write_close(); header('Location: http://www.examplesite.com/home.php'); header("HTTP/1.1 303 See Other"); die("redirecting"); }

Luego, home.php intenta recopilar la variable de sesión.

 $sessionStatus = session_status(); if ($sessionStatus !== PHP_SESSION_ACTIVE) { session_start(); } $loggedIn = $_SESSION['logged_in'];

El problema es que en el primer intento de inicio de sesión, $_SESSION['logged_in'] no está definido y genera un error, aunque login.php fue exitoso.

 Notice: Undefined index: logged_in

Un var_dump de $_SESSION devuelve una matriz vacía, pero sessionStatus informa que la sesión ya se inició, no tuvo que ejecutar session_start.

Esto obliga al usuario a iniciar sesión por segunda vez, luego todo está bien. Entonces, ¿la redirección está sucediendo demasiado rápido para que se establezca la variable de sesión? ¿Debo poner un retraso en la redirección? (¿y cómo haría eso?) ¿O es algo más que estoy haciendo mal?

EDITAR: Verifiqué con mi host en base a una respuesta a una pregunta similar y confirmé que una sesión nunca sería atendida por más de un servidor y no hay necesidad de habilitar sesiones pegajosas ni nada por el estilo. También actualicé el código anterior en función de una respuesta que se ofrece a continuación y alguna otra investigación, pero el error persiste.

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

La sesión probablemente se guarde automáticamente cuando finalice el script. Redirige antes de que finalice el script.

El tiempo que tarda su secuencia de comandos en terminar realmente depende en gran medida de lo que otro código necesita para relajarse. Es mejor guardar explícitamente la sesión.

Cómo hacerlo depende del tipo de sesiones que utilice. Un tipo se puede cerrar así:

http://php.net/manual/en/function.session-write-close.php

Si ese es el que estás usando, haz esto:

 if ($pwdHash == $storedpass) { $success = true; $_SESSION['user_id'] = $user; $_SESSION['logged_in'] = true; session_write_close(); header('Location: http://www.examplesite.com/home.php'); header("HTTP/1.1 303 See Other"); die("redirecting"); }

Y la sesión debería estar disponible en la página siguiente cuando redirige.

Si tus sesiones funcionan de forma diferente, tienes que adaptar el código, por supuesto. El punto que estoy tratando de hacer es: nunca ponga un retraso en su código. No es fiable y no tiene sentido. Simplemente guarde la sesión antes de redirigir.

over 4 years ago · Santiago Trujillo Relatório

0

Experimenté el mismo problema al escribir el contenido de la sesión en la base de datos. Para que funcione, agregué la función sleep() antes de configurar la variable de sesión, como se muestra a continuación.

 sleep(2); $_SESSION['GUID'] = uniqid(time().rand());

Resuelve el problema para mí.

Hemos observado este problema cuando las visitas a la página son frecuentes, pero si uno o dos usuarios acceden a la página, funciona como se esperaba.

over 4 years ago · Santiago Trujillo Relatório

0

He encontrado este mismo problema con una página de inicio de sesión, pero ninguna de las sugerencias me funciona. Lo único que he encontrado que funciona es redirigir la página a sí misma después de 1 segundo y luego verificar las variables de la sesión para ver si el inicio de sesión fue exitoso...

 startSession(); // assigns all the login session variables, etc. header('Refresh: 1; URL=/[THIS_PAGE].php'); // [THIS_PAGE] = the current login page

Sin embargo, esta es una solución muy poco elegante y no me gusta usarla. Pero funciona".

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda