Foros del Web » Programando para Internet » PHP »

problema sesiones, con 2 o mas aplicaciones

Estas en el tema de problema sesiones, con 2 o mas aplicaciones en el foro de PHP en Foros del Web. Tengo un problema con el manejo de sesiones en php, en el siguiente caso: Tengo tres aplicaciones corriendo en un mismo servidor apache 1.3.23 y ...
  #1 (permalink)  
Antiguo 15/05/2006, 14:47
 
Fecha de Ingreso: mayo-2006
Mensajes: 1
Antigüedad: 11 años, 6 meses
Puntos: 0
problema sesiones, con 2 o mas aplicaciones

Tengo un problema con el manejo de sesiones en php, en el siguiente caso:

Tengo tres aplicaciones corriendo en un mismo servidor apache 1.3.23 y php 4.1.0, y se puede presentar el caso en que un usuario pueda tener una misma cuenta (un nombre de usuario y contraseña) para dos aplicaciones.

Cuando este usuario se logea en una de las aplicaciones, la sesión con la que se le ha asignado está compartida para las tres aplicaciones.

Cómo puedo solucionar este problema para que cada aplicación maneje su sesión de forma independiente??
  #2 (permalink)  
Antiguo 15/05/2006, 15:08
Avatar de decano  
Fecha de Ingreso: diciembre-2005
Ubicación: Montevideo, Uruguay
Mensajes: 146
Antigüedad: 12 años
Puntos: 0
No te entiendo mucho , pero porque no le asigans una session para cada aplicación.
sludos
  #3 (permalink)  
Antiguo 15/05/2006, 15:21
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Al parecer las aplicaciones no las gestionas en ese servidor bajo "servidores virtuales" (y sólo creas directorios para tus aplicaciones: http://nose/aplicacion1/ .. http://nose/aplicacion2/ ...). Esa forma de trabajar sumado a una propagación del SID en cookies, puede hacer que tus sesiones se comporten como observas.

Bueno .. en cualquier caso si defines nombre diferente a tus sesiones de tus N aplicaciones podrías diferenciar claramente todas las sesiones.

session_name("elnombre");
session_start();

Dicha función (session_name()) se define -antes- de session_start()

Has de respetar el mismo "nombre" para todos los scripts de cada aplicación con el mismo nombre.

Otra forma (para el caso que propagues el SID en cookies) sería definir la validez (en domino) de cada cookie ajustando (antes de session_Start()) el valor de la cookie que PHP crea para propagar el SID con la función:

session_set_cookie_params()
http://www.php.net/manual/en/functio...kie-params.php

Concretamente como toda cookie (normal) deberías ajustar (si usas sub-dominos o dicho de otra forma "servidores virtuales"):

Cita:
jordi at jcanals dot net
15-Nov-2004 03:39
Something that has taken me some time to debug: session_set_cookie_params() does not work when the domain param is just a one level domain, like it was a TLD.

I have a site in an intranet and our internal domain is .local, so trying to set the cookie session to the .local domain does not work:

session_set_cookie_params(0, '/', '.local'); // Does not work

In all test I've done, setting the domain only works for SLDs and above:

session_set_cookie_params(0 , '/', '.sld.local'); Does work

This is nothing to do with PHP but the http protocol, witch does not permit setting cookies for TLDs for obvious security reasons.
ó (si usas directorios para separar tus aplicaciones)

Cita:
shrockc at inhsNO dot SPAMorg
19-Jun-2002 07:19
when setting the path that the cookie is valid for, always remember to have that trailing '/'.

CORRECT:
session_set_cookie_params (0, '/yourpath/');

INCORRECT:
session_set_cookie_params (0, '/yourpath');

no comment on how long it took me to realize that this was the cause of my authentication/session problems...
Pero sería recomendable que expliques como diferencias tus aplicaciónes en tu servidor ...


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 15/05/2006, 15:23
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por decano
No te entiendo mucho , pero porque no le asigans una session para cada aplicación.
sludos
De eso se trata .. pero el concepto "sesión" depende tando de como propague uno el SID que si se usa cookies en combinación con lo que comenté en mi anterior mensaje .. no queda tan claro donde acaba y empieza una sesión .. pues no están "separadas" físicamente (sobre todo al usar el mismo nombre por defecto .. o a usar la misma cookie que contiene el SID en todas las aplicaciones que corra ese servidor).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 15/05/2006, 20:23
 
Fecha de Ingreso: mayo-2004
Mensajes: 34
Antigüedad: 13 años, 6 meses
Puntos: 1
Hola, la primera solución, usando session_name(), ¿sirve en cualquier caso o hay que usar la segunda si el SID se propaga con cookies?

Gracias
  #6 (permalink)  
Antiguo 16/05/2006, 07:19
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por romansg
Hola, la primera solución, usando session_name(), ¿sirve en cualquier caso o hay que usar la segunda si el SID se propaga con cookies?

Gracias
No he hecho por mi parte pruebas al respecto en esa situación. Pero si que es cierto y "vivido" el problema cuando me he equivocado definiendo un nombre de sesión en un script y en otro "olvidandome" de poner el mismo y en consecuencia PHP tomando el valor del nombre de sesión por defecto (PHPSESSID) ... que se diferencian sesiones de esa forma .. Pero realmente al propagar el SID en cookies no sé como se comportará el tema.

Si puedes, realiza pruebas al respecto y nos comentas. Pero insisto que lo principal es saber o que veas en tu caso como "diferencias" tus aplicaciones en tu servidor: ¿lo haces con servidores virutales? (sub-dominos) .. o simplemente creas subdirectorios? .. Eso es muy importante .. (sobre todo para la creación de las cookies si propagas el SID en cookies).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 16/05/2006, 16:15
 
Fecha de Ingreso: mayo-2004
Mensajes: 34
Antigüedad: 13 años, 6 meses
Puntos: 1
Hola, gracias por responder. En mi caso diferencio las aplicaciones simplemente con subdirectorios. Una pequeña prueba:

www/sistema_a/indice.php
Código PHP:
<?
session_start
();

if (!isset(
$_SESSION['contador']))
{
  
$_SESSION['contador'] = 1;
}
else
{
  
$_SESSION['contador']++;
}

echo 
$_SESSION['contador'];
?>
www/sistema_b/indice.php
Código PHP:
<?
session_start
();

if (!isset(
$_SESSION['contador']))
{
  
$_SESSION['contador'] = 1;
}
else
{
  
$_SESSION['contador']++;
}

echo 
$_SESSION['contador'];
?>
Puesto así, los contadores se mezclan uno con el otro. Añadiendo

session_name('sistema_a') y session_name('sistema_b')

respectivamente, se obtienen contadores independientes. Esto último sucede incluso si ambos archivos se encuentran en el mismo directorio.

No sé si esto pueda considerarse una prueba concluyente pero, al menos en apariencia, tenemos que

Cita:
pasando el session_id por cookies y diferenciando por medio de subdirectorios, el uso de session_name permite distinguir varias aplicaciones.
Supongo que otra forma de mantener independientes la información de sesiones entre una y otra aplicación sería acostumbrarnos a poner toda la información en un arreglo:

Código PHP:
$_SESSION['nombre_del_sistema'] = array(); 
esto es, en lugar de tener

Código PHP:
$_SESSION['usuario'] = 'romansg';
$_SESSION['ultima_visita'] = 'ayer';
$_SESSION['proxima_visita'] = 'mañana';

etc
guardar

Código PHP:
$_SESSION['nombre_del_sistema']['usuario'] = 'romansg';
$_SESSION['nombre_del_sistema']['ultima_visita'] = 'ayer';
$_SESSION['nombre_del_sistema']['proxima_visita'] = 'mañana';

etc
Saludos
  #8 (permalink)  
Antiguo 16/05/2006, 16:44
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Como comentas .. podría ser solución usar un array para "separar" ambos sistemas y considerando que todo queda en una misma sesión. Pero, a veces uno por A o B motivo ha de "replicar" un sistema completo para otros fines (pruebas, versiones demo? .. aplicar nuevos desarrollos? .. etc).

Faltaría probar el tema de las cookies a ver que tal funciona ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 13:45.