Error en login de Preinscripcion 3.11

Hola

¿Cuando ingresan a preinscripcion, se estan generando archivos de este formato “sess_s5eqa5rnh3nc2tqbpm3brkd6vo” dentro de la carpeta /var/lib/php/sessions.?

¿Apache tiene permisos para grabar en esa carpeta?

Saludos!

Sergio la carpeta /var/lib/php/sessions estos son los permisos que tiene: -rwx-wx-wx como se pueden ver en la primer imagen que adjunto. Lo raro es que al intentar ingresar a la carpeta desde el winscp me dice: permiso denegado
Luego entre desde consola y puedo ver los archivos con el formato que me indicaste, tal como se ve en la 2da imagen que adjunto.

Hay que configurar algún archivo para que apache tenga permiso para grabar en dicha carpeta o la existencia de los archivos en el formato “sess_s5eqa5rnh3nc2tqbpm3brkd6vo” significa que apache ya tiene los permisos para escribir en la carpeta?

Aguardo tu respuesta.


permisos.png

permisos.png

permisos2.png

permisos2.png

Hola

Los permisos rwx-wx-wt root, significa que el único que puede leer en esa carpeta es root, por lo tanto seguramente apache puede estar escribiendo el archivo pero no lo puede leer para recuperar la sesión.

Deben darle permisos a la carpeta para que pueda leer apache, suponiendo que www-data es el usuario con el cual se ejecuta apache deben correr

$ sudo chown root:www-data /var/lib/php/sessions -R
$ sudo chmod 775 /var/lib/php/sessions -R

Prueben de esa manera, si sigue el error, envien el resultado de ejecutar el comando

$ ls -la /var/lib/php/sessions

Saludos!
2

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.