Foros del Web » Programando para Internet » PHP »

Problema con sesiones en un servidor

Estas en el tema de Problema con sesiones en un servidor en el foro de PHP en Foros del Web. Hola a todos, Tengo un codigo para registrar variables de sesion y usarlas en un sitio web, y funciona bien PERO necesito implementarlo en un ...
  #1 (permalink)  
Antiguo 26/09/2006, 04:20
 
Fecha de Ingreso: septiembre-2006
Mensajes: 7
Antigüedad: 17 años, 6 meses
Puntos: 0
Problema con sesiones en un servidor

Hola a todos,
Tengo un codigo para registrar variables de sesion y usarlas en un sitio web, y funciona bien PERO necesito implementarlo en un nuevo servidor, y en este las variables de sesion no se quedan.. (el mismo codigo que si funciona en otro servidor).
Uno tiene PHP 4.10-16 y otro 4.11. La unica diferencia es que el nuevo servidor, donde me da problemas, no soporta bases de datos, y el primero si, mysql.

La manera que uso es algo tal que asi:

Código:
	
if ($_POST['Opcion'] == "Registrar") {
		$_SESSION['usuario'] = $_POST["Texto"];
		echo "<BR>Usuario registrado ". $_POST["Texto"];
		}
	if ($_POST['Opcion'] == "Desregistrar") {
		unset($_SESSION['usuario']);
		echo "<BR>Usuario desregistrado";
		}
	if ($_POST['VerVar']) {
		if (isset($_SESSION['usuario'])) {
			echo "<BR>El usuario registrado es ". $_SESSION['usuario'];
			} 
		else {
			echo "<BR>El usuario no esta registrado";	
			}
		}
sabeis que puede ocurrir?
en el nuevo servidor despues de registrar la variable, la intento verificar y no se ha quedado. Es como si no se hubiera registrado...
(tambien he probado con la forma vieja de session_register() y tal, y lo mismo).

He descubierto que ocurre porque cada vez que refresco la pagina, cambia el session_id, cosa que SOLO ocurre con el nuevo servidor.
Al principio del script llamo a session_start();
Porque funciona bien en un servidor, y en este ultimo cambia todo el rato la sesion?? perdiendo por tanto las variables registradas...


Gracias!

Última edición por Patroclus02; 26/09/2006 a las 05:14
  #2 (permalink)  
Antiguo 26/09/2006, 06:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Uno tiene PHP 4.10-16 y otro 4.11. La unica diferencia es que el nuevo servidor, donde me da problemas, no soporta bases de datos, y el primero si, mysql.

Eso es lo de menos, .. no sé si conoces que las sesiones de PHP (las que usas) se configuran .. y que su configuración afecta a como se comporte tu código, pues ahí se definen temas como por ejemplo la propagación del SID.

Todo esto lo puedes ver en:
www.php.net/session

Haz un phpinfo() a tu nuevo servidor y compara la sección de información de directivas de sesiones (session.xxxx = valores ..) de uno y otro servidor.

Pero, es recomendable que "sepas" por qué las sesiones "hacen su mágia" .. todo esto gracias al concepto del "SID" y a su propagación (en las FAQ's tienes información al respecto).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 26/09/2006, 07:40
 
Fecha de Ingreso: septiembre-2006
Mensajes: 7
Antigüedad: 17 años, 6 meses
Puntos: 0
Ya lo acabo de comprobar.
Toda la configuracion es igual menos:
el nuevo servidor tiene use_trans_id = 0 y compat_42 = 0, ademas de un gc_divisor mas bajo.

El resto es igual...
No veo porque deberia iniciar una sesion nueva cada vez que refresco la pagina,... me da un session_id distinto y claro, las variables que registre no aparecen. Solo uso el codigo que mostré en el primer mensaje, nada extraño.

Otra cosa es que el save_path no lo veo desde mi explorador FTP en ninguno de los 2 servidores, asi que supongo que será accesible por FTP??

que mas puedo verificar?
Muchas gracias

Pd. no creo que tenga nada q ver, pero me equivoque, las versiones son 4.3.11 y 4.3.10-16, y en el nuevo servidor, donde tengo problemas, register_globals esta deshabilitado.

Última edición por Patroclus02; 26/09/2006 a las 07:48
  #4 (permalink)  
Antiguo 26/09/2006, 08:14
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
No veo porque deberia iniciar una sesion nueva cada vez que refresco la pagina,... me da un session_id distinto y claro, las variables que registre no aparecen. Solo uso el codigo que mostré en el primer mensaje, nada extraño.

Conoces el concepto del "SID"? .. Bueno, en tu caso no se está propagando el SID ya sea por el URL o en cookies (lo define la configuración de PHP y la forma de trabajar tu código: tu insertas el SID manualmente en tus link's y redirecciones que hagas?).

Cita:
Otra cosa es que el save_path no lo veo desde mi explorador FTP en ninguno de los 2 servidores, asi que supongo que será accesible por FTP??
Suele apuntar al directorio "/tmp" o directorio temporal en general fuera del alcance de tu "sitio" en ese servidor (sobre todo si hablamos de servicios de hosting compartidos) donde por FTP sólo entras a tu directorio restringido para tu sitio.

Cita:
Pd. no creo que tenga nada q ver, pero me equivoque, las versiones son 4.3.11 y 4.3.10-16, y en el nuevo servidor, donde tengo problemas, register_globals esta deshabilitado.
Al usar el array superglobal $_SESSION para trabajar con sesiones ya te dá igual si usas register_globals a ON o a OFF .. eso sí se hace más seguro donde lo tengas a OFF.

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 26/09/2006, 09:46
 
Fecha de Ingreso: septiembre-2006
Mensajes: 7
Antigüedad: 17 años, 6 meses
Puntos: 0
Creo que comprendo el concepto SID. yo no inserto manualmente el id ni en links ni nada, porque entre otras cosas, lo unico que hago es refrescar la web, es decir, que accedo a ella de nuevo. Y se pierde el SID,... yo no veo nada en la configuracion de sesion que me da phpinfo que pudiera producir esto...
  #6 (permalink)  
Antiguo 26/09/2006, 10:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Patroclus02 Ver Mensaje
Creo que comprendo el concepto SID. yo no inserto manualmente el id ni en links ni nada, porque entre otras cosas, lo unico que hago es refrescar la web, es decir, que accedo a ella de nuevo. Y se pierde el SID,... yo no veo nada en la configuracion de sesion que me da phpinfo que pudiera producir esto...
Si tu no propagas el SID a mano .. lo dejas que lo haga PHP.

PHP tiene dos formas para propagar el SID (Identificador Único de Sesión) .. ese dato es el que nos "referencia" los datos de la sesión en el servidor (archivo físico) con el "cliente" que las creó y le pertenecen.

PHP al iniciar un script con session_start() lo que hace es que va a "buscar" un SID propagado a ese script por algún médio: URL o en una cookie. Si no encuentra un SID válido o no existe (caso que ocurre cuando no se consigue propagar) .. se crea uno nuevo y en consecuencia una sesión nueva (con archivo físico incluido en el servidor).

Así qué, si dices que Tu a mano no propagas el SID en tus links o redireccionamientos que hagas (sean por cabeceras HTTP, javascript o como quieras). Tendrás que "ver" que PHP lo haga por tí.

No sé que código usas ni como "vuelves a tu misma página" . .no sé si usas un link, javascript .. o un header("Location ...") o como ...

Lo más "sano (menos complicado para tu código)" y a la vez "seguro" es dejar a PHP que propague ese SID en una cookie que PHP creará automáticamente si así se lo dices:

(php.ini)
session.use_trans_sid = 0 (recomendable desactivar esta si ya lo hacemos por la otra).
session.use_cookies = 1 (sobre todo esta directiva)
session.use_only_cookies = 1


Si ya usas "session.use_cookies = 1" y la sesión (el SID) sigue sin poder propagarse, revisa tu navegador que no esté bloqueando las cookies que PHP está generando (revisa tu nivel de seguridad) .. Revisa tu antivirus si lo usas (algunos "capturan" cookies o las filtran como "seguridad") .. En fin, intenta evaluar que esa cookie la estás recibiendo.

La otra prueba que puedes hacer para salir de dudas es propagar definitivamente el SID en el URL manualemnte Tu mismo. Para usa la constante: SID en tus links/redireccionamientos que hagas y chequea de nuevo tu sistema .. si así te funciona, definitivamente tienese problemas con las cookies que PHP está creando para propagar el SID.

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 26/09/2006, 10:55
 
Fecha de Ingreso: septiembre-2006
Mensajes: 7
Antigüedad: 17 años, 6 meses
Puntos: 0
Para refrescar, tan simple como F5.
Uso mozilla, pero en explorer pasa lo mismo.

Ambos servidores tienen use_cookies = 1 y use_only_cookies = 0.

Lo unico es que el que no va tiene trans_sid = 0.
Pero.. como puedo modificar esta configuracion si no tengo acceso a php.ini?? Las webs estan alojadas en un servidor contratado, y no en ningun ordenador fisico al que tenga acceso...

gracias por tu ayuda!
  #8 (permalink)  
Antiguo 26/09/2006, 11:19
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Patroclus02 Ver Mensaje
Para refrescar, tan simple como F5.
Uso mozilla, pero en explorer pasa lo mismo.

Ambos servidores tienen use_cookies = 1 y use_only_cookies = 0.

Lo unico es que el que no va tiene trans_sid = 0.
Pero.. como puedo modificar esta configuracion si no tengo acceso a php.ini?? Las webs estan alojadas en un servidor contratado, y no en ningun ordenador fisico al que tenga acceso...

gracias por tu ayuda!
Bueno .. ya te decía .. tienes problemas con la cookie que PHP está generando. No sé si ya has revisado las condiciones de pruebas que usas: navegador, firewall/antivirus .. etc.

La configuración de PHP se puede alterar por ini_set() (siempre que puedas) o por un .htacces o por un php.ini própio que tu proveedor te ponga a tu disposición.

www.php.net/ini_set

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 26/09/2006, 14:02
 
Fecha de Ingreso: septiembre-2006
Mensajes: 7
Antigüedad: 17 años, 6 meses
Puntos: 0
Pues he deshabilitado todo antivirus, anti-spyware, bloqueo de cookies y firewalls. Todo. Y sigue pasando... sinceramente no se ya que mirar! tiene que ser una tonteria increible pero no doy con ello...
  #10 (permalink)  
Antiguo 26/09/2006, 14:20
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Se puede ver el URL donde dices que te dá problemas? (para que lo pruebe la gente en otros ambientes: navegadores y configuraciones?

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #11 (permalink)  
Antiguo 26/09/2006, 16:12
 
Fecha de Ingreso: septiembre-2006
Mensajes: 7
Antigüedad: 17 años, 6 meses
Puntos: 0
consolasparasiempre.net/sessions.php

con las 3 w

Cada vez que registras una variable con un nombre, o simplemente cuando das a "ver variable" (para ver el contenido previamente registrado), cambia el SID!
Esto no ocurria con el otro servidor.

un saludo y gracias una vez mas.
  #12 (permalink)  
Antiguo 26/09/2006, 17:49
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Definitivamente tienes un problema con la propagación del SID.

Tu configuración de PHP usa la propagación del SID en cookies. Las cookies al parecer no se están generando correctamente.

Podrías hacer la prueba de propaga el SID manualmene en el URL. En tu ejemplo demo de sesiones que usas un formulario HTML, propga el SID en un campo oculto:

Código PHP:
<input type="hidden" name="<? echo session_name() ?>" value="<? echo session_id() ?>">
Si así te funciona, tendrías que propagar el SID en el URL en todo redireccionamiento que hagas, links y demás "manualmente" o intentar forzar la configuración de PHP vía función ini_set() o por un .htaccess (si tu proveedor te lo permite usar).

Por otro lado, deberías ver que pasa con la "cookie" por qué no se genera. La cookie que PHP genera como toda cookie se puede configurar ciertos parámetros como el "domino" al que pertenece o el directorio para su ambito entre otras cosas. Para alterar esos valores de la cookie que PHP crea puedes usar:

session_set_cookie_params()
www.php.net/session_set_cookie_params

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #13 (permalink)  
Antiguo 27/09/2006, 03:06
 
Fecha de Ingreso: septiembre-2006
Mensajes: 7
Antigüedad: 17 años, 6 meses
Puntos: 0
Acabo de mandar un mensaje al servicio tecnico de mi servidor porque verdaderamente estoy perdido
Algo falla, como puedes ver, pero no se si podré arreglarlo porque precisamente es la primera vez que uso sesiones y aun no use cookies, y la experiencia es un rango.

De todos modos, que podría variar en los parametros de las cookies para que funcionara ??
  #14 (permalink)  
Antiguo 27/09/2006, 07:13
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Patroclus02 Ver Mensaje
Acabo de mandar un mensaje al servicio tecnico de mi servidor porque verdaderamente estoy perdido
Algo falla, como puedes ver, pero no se si podré arreglarlo porque precisamente es la primera vez que uso sesiones y aun no use cookies, y la experiencia es un rango.

De todos modos, que podría variar en los parametros de las cookies para que funcionara ??
El dominio, especificarlo minimo .. no sé que más.

De todas formas .. probastes a propagar el SID manualmente como te comenté?

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 08:56.