Foros del Web » Programando para Internet » PHP »

Cómo guardar una sesión temporalmente

Estas en el tema de Cómo guardar una sesión temporalmente en el foro de PHP en Foros del Web. Saludos. Tengo este escenario: En un proyecto, tengo una página de login en la que cuando un usuario se autentica correctamente, se guarda en una ...
  #1 (permalink)  
Antiguo 10/08/2010, 14:23
 
Fecha de Ingreso: julio-2008
Mensajes: 35
Antigüedad: 16 años, 4 meses
Puntos: 0
Cómo guardar una sesión temporalmente

Saludos.
Tengo este escenario:

En un proyecto, tengo una página de login en la que cuando un usuario se autentica correctamente, se guarda en una variable de sesión su email encriptado con md5 y su session_id también encriptado con md5.

El asunto es que cuando la autenticación es correcta, se hace una redirección a un script de una herramienta de foros con la información del usuario con el fin de "loggear" al usuario a esa herramienta "por debajo" para luego finalmente redireccionar al index.php de la aplicación la cual analiza las variables de sesión mencionadas arriba para saber si el usuario está autenticado (es decir, el usuario queda loggeado en la aplicación y en la herramienta de foros) .

Todo funciona bien, con excepción de una pequeña pulga. La primera vez que el usuario se va a loggear, algo en el script interno de la herramienta de foros hace que se limpie la sesión pero sólo esa primera vez, por lo que al regresar al index.php de la aplicación, esta encuentra que el usuario no está loggeado (al haberse limpiado las variables de sesión).
Si el usuario intenta loggearse una segunda vez, entonces la sesión ya no es limpiada por la herramienta de foros y el usuario puede loggearse sin problemas.

Yo creo saber dónde puede estar pasando eso ya que la herramienta de foros ejecuta y construye algunas clases que manejan la sesión, pero honestamente no quiero toquetear el código de esa herramienta (además que dicho código es muy extenso y complejo) y no se sabe si más adelante dicha herramienta pueda ser cambiada por otra.

¿Cuál sería la mejor forma de guardar la información de la sesión de manera temporal con el fin de que al regresar a index.php la sesión recupere los datos que tenía antes de llamar al script de la herramienta de foros?

Muchas gracias de antemano.
  #2 (permalink)  
Antiguo 10/08/2010, 14:44
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: Cómo guardar una sesión temporalmente

o_O! es muy difícil de ayudarte sin ver código...

Las sesiones ($_SESSION) tienen un tiempo de vida determinado (dependiendo de la configuración en PHP) puede tener X minutos de vida, o de plano hasta que se cierre el navegador (o se destruya la cookie que contiene el indice de la sesión), por lo tanto si estas utilizando sesiones es difícil que esta "desaparezca" entre un archivo y otro, por lo cual lo que a de suceder es que en alguna parte de tu código estés vaciando/limpiando la sesión, pero como te dije al principio, sin ver código es estar adivinando...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #3 (permalink)  
Antiguo 11/08/2010, 08:52
 
Fecha de Ingreso: julio-2008
Mensajes: 35
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Cómo guardar una sesión temporalmente

Muchas gracias por tu respuesta Nemutagk.

Pues, antes de modificar código, me puse a hacer un par de pruebas e instalé todo el proyecto en 2 servidores diferentes al que está en "vivo" y la pulga no sucede, entonces más me suena a un problema del servidor.

Pues, el código de la herramienta de foros es muy extenso y tiene múltiples llamadas e includes entre sí, por eso veo difícil postear el código acá (es el IP.Board de InvisionPower), pero el código que está del lado de la aplicación que muestra que la sesión se está perdiendo es el siguiente:

Código PHP:
session_start();

file_put_contents('prueba.log','['.date('Y-m-d H:i:s').'] Contenido de la sesion antes del header: '.print_r($_SESSION,true)."\n",FILE_APPEND);

header('Location: forum/index.php?username=elusuario&pass=laclave');

file_put_contents('prueba.log','['.date('Y-m-d H:i:s').'] Contenido de la sesion despues del header: '.print_r($_SESSION,true)."\n",FILE_APPEND); 
En el primer file_put_contents, la variable de sesión viene con los datos de autenticación, pero después del header, el segundo file_put_contents arroja la sesión vacía.
Pero nota importante: esto sólo sucede en el primer intento de login, en el segundo intento ya no hay ningún problema, por eso creo que la herramienta de foros, la primera vez algo detecta y destruye la sesión.

Creo que si no se arreglara el problema del servidor, seguramente tendré que buscarle un arreglo a esto y por eso se me había ocurrido guardar la sesión antes de la llamada al header, pero cómo sería mejor hacer ese almacenamiento temporal de la sesión?

Muchas gracias!
  #4 (permalink)  
Antiguo 11/08/2010, 09:00
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: Cómo guardar una sesión temporalmente

Y tienes idea de lo que hace "forum/index.php"? porque puede estar limpiando la sesión, ya que cuando haces un header lo que haces es comenzar a procesar el siguiente archivo, y si queda código en el archivo original seguir procesandolo, ahora, si es problema del servidor compara la configuración del servidor que te da problemas con el servidor que no te da problemas, esto se hace con un phpinfo();
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #5 (permalink)  
Antiguo 11/08/2010, 09:08
 
Fecha de Ingreso: julio-2008
Mensajes: 35
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Cómo guardar una sesión temporalmente

Gracias Nemutagk.

Sí, he comenzado a comparar directivas de configuración con phpinfo() y me he encontrado varias diferencias, pero tendré que pedirle al administrador del servidor si podemos hacer algunos cambios en "caliente".

Básicamente forum/index.php lo que tiene es varios includes que a su vez tienen otro montón de includes y creo saber por dónde anda la cosa, en el constructor de una clase IP.Board pregunta si hay alguna sesión creada para su herramienta y si no existe crea una sesión destruyendo la que hay ahorita.
Probé poner file_put_contents allí como para darme cuenta en qué parte del IF estaba entrando pero nunca se creó el log, es decir, pareciera que nunca entró allí y es la única parte de todo ese código en que me he encontrado operaciones con la sesión.

Lo que sí me pareció extraño es que exactamente ese mismo código no dio ningún problema en los otros 2 servidores, por lo que comenzaremos a pedir algunos cambios en el servidor a ver qué sucede.

Aún así, me gustaría tener otra carta bajo la manga debido a que la corrección de la pulga tiene alguna prioridad de urgencia. En todo caso ¿qué me recomendarías para guardar los datos de la sesión de manera temporal?

Muchas gracias ;)
  #6 (permalink)  
Antiguo 11/08/2010, 09:18
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: Cómo guardar una sesión temporalmente

Posiblemente guardando los datos de sesión en la DB o en una cookie, incluso en un archivo... sin embargo, esto te funcionará bien con un numero bajo de usuarios, si este se incrementa mucho el sistema tendrá problemas; creo que primero seria bueno que explicaras el porque estas iniciando una doble sesión (o al menos es lo que entendí), tal vez lo mejor seria sobrescribir la sesión, vamos, si el foro es un sistema pre armados tal vez deberías primero ver como crea la sesión dicho foro, y sobre esta agaragar la información que tu necesitas, no se si me entiendas...

Para fines prácticos inicia sesión dentro de foro (con sus propias herramientas) y ve como se crea la sesión (has un var_dump($_SESSION)), tal vez el problema es que el sistema del foro detecta variables que son de su uso y limpia la sesión para crear una nueva sesión valida, aunque esto es solo una idea, como te comento, todo esto es estar adivinando =/
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #7 (permalink)  
Antiguo 11/08/2010, 09:23
 
Fecha de Ingreso: julio-2008
Mensajes: 35
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Cómo guardar una sesión temporalmente

Gracias Nemutagk.

Sí, excelente idea. Voy a fijarme en la sesión que crea la herramienta de foros por sí sola a ver qué logro encontrar.

Muchas gracias nuevamente y veremos qué sucede con esto.

Un saludo.

Etiquetas: sesión
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:11.