Volver a la portada del blog

Al día con las versiones de Drupal

17 Enero, 2008 por Pedro

A causa de varios problemas de seguridad, nuestro proveedor de hosting tuvo que actualizar PHP a la versión 5 de improviso. Esta actualización nos ha causado varios problemas, entre ellos, que varias de nuestras instalaciones de Drupal en 4.7 y 4.6 se veían afectadas por un curioso problema: una vez identificado, la información de login no persiste, es decir, aunque realices el login, en la página siguiente eres usuario anónimo (uid 0) de nuevo.

Tras investigar y descubrir que es un problema relacionado con el fichero includes/session.inc la solución consistió en aplicar este parche
function sess_read($key) {
global $user;
register_shutdown_function('session_write_close');
$result = db_query_range("SELECT u.*, s.* FROM {users} u
INNER JOIN {sessions} s ON u.uid = s.uid
WHERE s.sid = '%s' AND u.status < 3", $key, 0, 1);
if (!db_num_rows($result)) {

Y eliminar la llamada a register_shutdown_function(’session_write_close’); en la función db_connect(), en el caso de drupal 4.7, del fichero includes/database.mysqli.inc

La explicación en detalle es que, a partir de PHP 5.0.5, los destructores pueden usar sesiones pero los manejadores de sesion no pueden usar objetos, por lo que debemos cambiar el orden, se ha de cerrar la sesion con register_shutdown_function(’session_write_close’); antes de destruir los objetos.

Este problema y su solución están ya incluidos en la rama principal de desarrollo de Drupal, y evitar este tipo de inconvenientes es una razón adicional a la que nos ofrecen los parches de seguridad, por lo que, si bien no sería imprescindible migrar todas las instalaciones de Drupal a la release más actual, sí es muy recomendable tenerlas actualizadas al último parche de su versión correspondiente.

Deja un comentario