Error en login de Preinscripcion 3.11

El problema para loguearse continua a pesar de los permisos otorgados, el resultado del comando ls -la /var/lib/php/sessions es:

root@debian-template:~# ls -la /var/lib/php/sessions
total 128
drwxrwxr-x 2 root www-data 40960 oct 30 12:41 .
drwxr-xr-x 4 root root 4096 sep 28 2018 …
-rw------- 1 www-data www-data 33 oct 30 12:28 sess_19ai96so3dh5sknp28mhkpjd86
-rw------- 1 www-data www-data 32 oct 30 12:28 sess_209dol9ghf6tk1uecgr8535fh0
-rw------- 1 www-data www-data 21 oct 30 12:27 sess_2nmsiebuu3p1qh15paa9bt9g4n
-rw------- 1 www-data www-data 33 oct 30 12:24 sess_3a4sk7bhnkql3anjr8p95qjquo
-rw------- 1 www-data www-data 32 oct 30 12:41 sess_3g7goj9ou09115966e968g7vg9
-rw------- 1 www-data www-data 33 oct 30 12:28 sess_3lmpkhvp1jiq5ndd2vkmrrdvgi
-rw------- 1 www-data www-data 32 oct 30 12:26 sess_44gfck7cql7v83hp99us8o7as7
-rw------- 1 www-data www-data 21 oct 30 12:27 sess_47l8r6jo7gquie7tkr000h3hva
-rw------- 1 www-data www-data 33 oct 30 12:26 sess_4p7t17acidvvh03j1slslim4m7
-rw------- 1 www-data www-data 33 oct 30 12:36 sess_5r08s90uo43j8locuj2e3jrno2
-rw------- 1 www-data www-data 33 oct 30 12:27 sess_62a56t1giodqvt01sqslj812eg
-rw------- 1 www-data www-data 33 oct 30 12:28 sess_7hna9u4vicd47hprs0ha9epgm3
-rw------- 1 www-data www-data 33 oct 30 12:41 sess_eog4o23cidhj10nchph0oc7kfc
-rw------- 1 www-data www-data 33 oct 30 12:36 sess_fk5jgidnuikj128958bktbs3oj
-rw------- 1 www-data www-data 80 oct 30 12:36 sess_gknao2dmccn7abof6fuqoufnur
-rw------- 1 www-data www-data 230 oct 30 12:27 sess_i0s24nfp3mhebra9g1cchi8cju
-rw------- 1 www-data www-data 33 oct 30 12:34 sess_maj7cdnvsbt72g0naf1mc7k3gh
-rw------- 1 www-data www-data 33 oct 30 12:27 sess_pqjj290afko0iq4jloeacovt2q
-rw------- 1 www-data www-data 33 oct 30 12:27 sess_psiar5k0ch96uj657snrbee3q3
-rw------- 1 www-data www-data 33 oct 30 12:33 sess_psnklrnn7b51t413sm6q8psb9t
-rw------- 1 www-data www-data 33 oct 30 12:24 sess_qqq9r15pr6fouph14kqvcstgnc

Te paso una captura del msj que les muestra a los usuarios luego de cliquear en el link que reciben en su correo para activar la cuenta.

y la url sigue cambiando cuando intentan loguearse. Pasa de [b]http://138.117.79.62/preinscrip/imes311/[/b] a [b]http://138.117.79.62/preinscrip/imes311/acceso/login?ref=http://138.117.79.62/preinscrip/imes311/censo[/b]


WhatsApp Image 2020-10-30 at 09.45.17.jpg

WhatsApp Image 2020-10-30 at 09.45.17.png

Hola Javier,

El error “Este link no es válido. Puede que tu cuenta ya se encuentre activada o que lo hayas copiado mal del mail que te enviamos.” se puede llegar a dar porque copiaron mal la URL que les llega por email. Dicha URL contiene un query string con un TOKEN. Dicho TOKEN se busca con la siguiente query:


SELECT 
					id_preinscripcion, 
					usuario, 
					email_valido 
				FROM 
					sga_preinscripcion
				WHERE 
					codigo_validacion = <TOKEN>

Dicha query al no devolver datos da ese error. En los logs debería decir “TOKEN inexistente”.

saludos.
2

Hola Javier,

Con respecto al problema al intentar logearte, el punto clave donde hace el login es en la función autenticar de la clase vendor/siu/chulupi-framework/src/SIU/Chulupi/acceso/LoginManager.php, especialmente las variables $session y $auth.

Te pediría que agregues lo siguiente para que guarde mas datos en los logs:

  1. En la función __construct de la clase vendor/siu/chulupi-framework/src/SIU/Chulupi/nucleo/sesion.php agrega:

    function __construct()
    {
		klog2("session_name", $this->get_session_name());
		klog2("cookie_path", $this->get_cookie_path());
		klog2("cookie_domain", $this->get_cookie_domain());
		..............................
    }

  1. En la función get_auth_provider de la clase vendor/siu/chulupi-framework/src/SIU/Chulupi/acceso/LoginManager.php agrega:

	protected function get_auth_provider(sesion $session)
	{
		..............................
		klog2("auth_type", $auth_type);
		return $this->fuentes->instanciar_fuente($auth_type);
	}

Con eso podremos ver en los logs si hay diferencias en los nombres de la sesión de una petición a otra, etc.

saludos.
8

Hola Leonardo

No copió el link, lo cliqueo desde el email que le llegó, no cambió nada, se lo hice yo con el email de un compañero para probar. El problema se da porque cambia la url siempre que uno intenta loguearse, ya sea la primera vez entrando por el link de registro o luego con poniendo el email y contraseña. Eso era lo que quería mostrarles con la imagen.

Hola Leonardo

  1. Agregué esas 3 líneas en la función construct quedando así la función:

function __construct()
{
session_name($this->get_session_name());
$secure_cookie = (kernel::proyecto()->get_ssl_alcance() == ruteador::SSL_ALCANCE_ALL);
session_set_cookie_params(0, $this->get_cookie_path(), $this->get_cookie_domain(), $secure_cookie, true);
session_start();
klog2(“session_name”, $this->get_session_name());
klog2(“cookie_path”, $this->get_cookie_path());
klog2(“cookie_domain”, $this->get_cookie_domain());
}

  1. En la función get_auth_provider, agregue solo la primer linea porque la segunda ya estaba, quedando asi la funcion:

protected function get_auth_provider(sesion $session)
{
$auth_type = $session->get_con_default(‘__kernel_auth’, null);
if ($auth_type == null && isset($_GET[‘auth’])) {
$auth_type = $_GET[‘auth’];
}
klog2(“auth_type”, $auth_type);
return $this->fuentes->instanciar_fuente($auth_type);
}

Ahora hacemos algunos intentos de loguin y luego te paso los logs?

Hola Javier, perfecto!!!

Deberías validar que en todos los logs de las diferentes peticiones no cambie el “session_name”, por su configuración todos los logs deberían decir:


--  session_name  --------------------------------------------------------------

siu_sess_preinscrip/imes311_alumno

--  cookie_path  ---------------------------------------------------------------

/preinscrip/imes311

--  cookie_domain  -------------------------------------------------------------

138.117.79.62

También agrega lo siguiente a los logs, en la función instanciar_persona de la clase vendor/siu/chulupi-framework/src/SIU/Chulupi/acceso/LoginManager.php:


	protected function instanciar_persona(sesion $session, AuthenticationProvider $auth = null)
	{
		$autenticado = $session->abierta();
		klog2("=== autenticado ===", $autenticado); // <==> Agregá esto
		
		if($autenticado = $session->abierta()){
			$id_persona = $session->get_id_persona();
			$persona = $this->get_clase_persona($id_persona);
			kernel::set_persona($persona);
		}else {
			$persona = $this->get_clase_persona(null);
			kernel::set_persona($persona);
		}
		
		klog2("=== persona ===", print_r($persona, true));// <==> y esto
		
		if($auth != null){
			$auth->evt_persona_instanciada($persona, $autenticado);
		}

		return $persona;
	}

saludos.
2

Hola Javier,

Encontré un post que puede llegar a servir: https://stackoverflow.com/questions/17242346/php-session-lost-after-redirect

¿vos podes pasarnos un phpinfo() de tu servidor para poder comparar tu configuración con la nuestra?

También te pediría que en la función __construct de la clase vendor/siu/chulupi-framework/src/SIU/Chulupi/nucleo/sesion.php agregues estos klog2:


    function __construct()
    {
		session_name($this->get_session_name());
		$secure_cookie = (kernel::proyecto()->get_ssl_alcance() == ruteador::SSL_ALCANCE_ALL);
		session_set_cookie_params(0, $this->get_cookie_path(), $this->get_cookie_domain(), $secure_cookie, true);
        session_start();
		
		klog2("=== session_id ===", session_id());
		klog2("=== session_name ===", session_name());
		klog2("=== session_save_path ===", session_save_path());
		
    }

saludos.
2

Hola Leonardo

Ésta era mi función antes de agregarle las 2 líneas que me pediste:


protected function instanciar_persona(sesion $session, AuthenticationProvider $auth = null)
        {
                if($autenticado = $session->abierta()){
                        $id_persona = $session->get_id_persona();
                        $persona = $this->get_clase_persona($id_persona);
                        kernel::set_persona($persona);
                }else {
                        $persona = $this->get_clase_persona(null);
                        kernel::set_persona($persona);
                }
                if($auth != null){
                        $auth->evt_persona_instanciada($persona, $autenticado);
                }
                return $persona;
        }

Como te darás cuenta también le faltaba la primer línea: $autenticado = $session->abierta();
Yo se la agregué igualmente. Vos sacaste ese código de la versión 3.11.0 de Preinscripcion? De ser así porque a mi función le faltaría esa línea si tengo la versión 3.11 instalada?

Hola Javier,

No, yo lo tengo igual que vos, esas lineas te decía que las agregues para poder loggear mas información.

No te olvides de pasarme el “phpinfo” para poder observar si hay algo extraño.

saludos.
2

Te paso la url para que lo veas vos mismo: http://138.117.79.62/preinscrip/imes311/

y adjunto los logs.


logs_alumno_alumno_imes.rar (4.75 MB)

Buen día Javier!

Estuve revisando y encontré una posible solución:

En el archivo de configuracion de php para apache2 (/etc/php/7.3/apache2/php.ini) hay una variable llamada sessions.auto_start. Si la misma está con un valor de 0, cambialo a 1, corré en la terminal “service apache2 reload” y luego “service apache2 restart”, e intentá loguearte devuelta.

Notificanos si esto soluciona tu problema.

Saludos!

20

Solucionado el problema del SIU Preinscripción, logre loguearme con un usuario. Ahora cuando entro al SIU Gestión me dice lo sgte:

Ya existe una sesión abierta, probablemente tenga activado session.auto_start = 1 en el php.ini

Pueden corroborarlo aquí: http://138.117.79.62/guarani/3.15/

Buen día! Como puedo solucionar éste problema?
Cuando el valor está en 0 tengo Siu Gestión pero no Siu Preinscripción y si el valor está en 1 tengo Siu Preinscripción pero no funciona el Siu Gestión

Hola

Teniendo en cuenta el aporte de Milton en las Respuestas #8 y #10 y en la respuesta a otro foro de un error similar en 3w, deberían chequear la versión de php y ver la posibilidad de hacer un downgrade (entendemos que debe ser a una versión anterior a 7.3.19) a ver si soluciona el problema. Mientras tanto estamos revisando la compatibilidad del framework con respecto a esta actualización de PHP

Saludos

Entonces los requisitos deberían decir mas específicos, no deberían decir:
PHP 7.3.x También se deben tener instaladas y activadas las extensiones php: curl, mbstring, pdo_pgsql, openssl, apc o apcu, gd2. Establecer el valor de la directiva de configuración ‘max_input_vars’ en 1200. Establecer el valor de ‘allow_url_fopen’ en ‘1’.

acá tiene que decir es necesaria la versión 7.3.el numero de versión con la que probaron y funciona y el comando especifico para ubuntu, debian, centos para instalar dicha versión especifica porque instalamos la ultima versión y después tenemos estos problemas que lleva días solucionar.

Como desinstalo la versión de php que tengo e instalo la necesaria y probada que funciona?

Buenas tardes!

Estuvimos analizando el problema en nuestro framework. No necesitan hacer un downgrade. Reemplacen la función “get_session_name” en vendor/siu/chulupi-framework/src/SIU/Chulupi/nucleo/sesion.php por la siguiente función:


/**
 * 
 * @see https://bugs.php.net/bug.php?id=79699
 */
protected function get_session_name()
{
	$alias = (is_null(kernel::proyecto()->get_alias()))? '' : kernel::proyecto()->get_alias();
	$postfix = $alias.'_'.kernel::proyecto()->get_bloque_acceso();
	
	$caracteres_no_permitidos = ['(', ')', '<', '>', '@', ',', ';', ':', '\\' ,'"', '/', '[', ']', '?', '=', '{', '}', '.', ' '];
	$postfix = trim(str_replace($caracteres_no_permitidos, "", $postfix));
	$session_name = "siu_sess_$postfix";
	kernel::log()->add_debug("=== session_name ===", $session_name);
	return $session_name;
}

Luego vuelvan a colocar la variable Session.auto_start a 0, como estaba, y por favor prueben estos cambios para avisarnos si se soluciona el problema

FUNCIONO!!! Mi problema estaba con Augestion 3.18 en producción.

Muchas gracias!!

Sigue siendo llamativo que en nuestro caso en desarrollo y testing funciona con la función original, quizas por el tema de manejo de cookies.

Saludos, Diego.

Hola Gabriel buen día!

Hice los cambios en la función que pasaste y luego hice service apache2 reload y service apache2 restart pero sigo con el problema en mi SIU Gestión con el mismo mensaje:
Ya existe una sesión abierta, probablemente tenga activado session.auto_start = 1 en el php.ini

Preinscripcion y Autogestion si me funcionan.

hay algún paso mas para solucionar ?

Buen día Javier.

Fijate que más abajo te aclaré que debías reestablecer la opcion “session.auto_start” del php.ini a 0, para que no sigas teniendo ese error. Verificalo y avisanos.

Saludos!

Ya tengo en funcionamiento el Siu Gestion 3.18, Autogestion 3.18 y Preinscripcion 3.11

El unico que no me esta funcionando es el perfil Admin de Preinscripcion: http://138.117.79.62/preinscrip_admin/imes311/

Error 404
Not Found
The requested URL was not found on this server.

Yo no cambie nada del archivo .conf que puede ser?
Si elimino el link simbólico y lo vuelvo a agregar el .conf?