Problema con Sessiones en IE7 y FireFox

Rodrigo Fuentealba darkprox en gmail.com
Jue Mar 15 13:02:22 CLT 2007


El 15/03/07, Alina Palmero Cueva <alina en cav.desoft.cu> escribió:
>
> Hola a todos,

Hola

> Me ha surgido una enorme duda sobre como manejar la sesiones de PHP en
> navegadores que utilizan pestañas.

Veamos:

> Sucede que tengo una aplicación a la que solo usuarios registrados pueden
> accesar a ella con su usuario y paswd respectivos, pues para manejar algunos
> datos del usuario y su comportamiento dentro de la aplicación utilizo la
> variable $_SESSION.

Correcto.

> El problema:
>
> Imaginen que ingreso con el usuario 1, bueno pues este se autentica y se
> cargan sus privilegios correspondientes.

...como toda aplicación

> Abro una nueva pestaña y acceso a la aplicación con el usuario 2 y este se
> autentica correctamente y se cargan sus privilegios correctamente.

Aquí es donde tienes un problema:

Tienes que preguntar si la sesión ya está abierta por un usuario, y
borrarla con un $_SESSION = array(); o bien, no dejar que el otro
usuario se autentique.

> Cuando empiezo a trabajar con el usuario 1 todo funciona normalmente, cambio
> de pestaña para trabajar con el usuario número 2 y cuando recargo la página
> (en la pestaña del usuario 2) ... Sorpresa!! resulta que el usuario 2 se
> convierte en el 1 !!!

Es lo más normal del mundo. Todos los navegadores (salvo Mozilla, por
lo que recuerdo) que no te deja abrir dos instancias si no es con
distintos perfiles) tienen almacenados sus documentos en una caché que
es compartida entre todas las sesiones, y donde se guardan las cookies
de sesión.

Lo propio te pasará con Internet Explorer 6 en todo caso distintas ventanas.

> Bueno poniendo un poco de lógica e investigando, pues me dí cuenta que
> independientemente de que tengas una nueva pestaña sucede que el ID de la
> sesión es el mismo!!

Porque las cookies que se guardan en la caché no sólo son las mismas:
en muchos casos, es una sola.

> La pregunta:
>
> No debería generar un nuevo ID de sesion al encontrarte en una pestaña del
> navegador?

No, ¿qué te hace pensar que cada instancia del navegador tiene un ID único?

> Por lo que veo el ID de la sesion es generado por cada instancia del
> navegador que tengas en el momento (navegadores abiertos)

Yup. Más bien, por cada conexión que la solicite.

> ¿Como puedo solucionar esto?, ¿Es un problema de los navegadores?, ¿Es un
> problema de PHP? o lo que suena mas problable es un problema en mis scripts.

Nada de probable. Es un diseño de arquitectura que viene de 1970.

> ¿Como puedo forzar a generar un nuevo ID de sesion, cada vez que se
> autentique un usuario?

con algo como session_regenerate_id()... o no?

$_SESSION = array();

		function RegenerarID($borrarsesion = false)
		{
			if(function_exists('session_regenerate_id'))
			{
				return session_regenerate_id($borrarsesion);
			}
			else
			{
				do
				{
					$nuevoid = uniqid(dechex(rand()));
				}
				while ($nuevoid === session_id());

				if ($borrarsesion)
				{
					session_unset();
				}

				session_id($nuevoid);
				return true;
			}
		}
?>

eso te puede servir.

-- 
Rodrigo Fuentealba Cartes
Desarrollador de Sistemas Web
Registered User 387639 - http://counter.li.org



Más información sobre la lista de distribución PHP