Foros del Web » Programando para Internet » PHP »

Error Imagen php y Mozilla

Estas en el tema de Error Imagen php y Mozilla en el foro de PHP en Foros del Web. Hola estoy intentando instalar un código que añade un código de validación de formularios mediante una imagen que se genera al azar, el problema es ...
  #1 (permalink)  
Antiguo 08/08/2006, 18:22
 
Fecha de Ingreso: agosto-2003
Mensajes: 398
Antigüedad: 14 años, 3 meses
Puntos: 0
Error Imagen php y Mozilla

Hola estoy intentando instalar un código que añade un código de validación de formularios mediante una imagen que se genera al azar, el problema es que al llamar el código debo hacerlo de la siguiente forma:

<img src="codigo.php"> donde codigo.php e el archivo php que genera la imagen aleatoria.

En INternet Explorer me muestra correctamente la imagen, sin embargo en Mozilla solo me muestra la imagen en fondo gris sin que aparezca ningun codigo.

Este es el código que genera la imagen:
codigo.php
Código PHP:
<?php // codigo.php
// Iniciamos la sesión
session_start();

// Le damos un nombre
session_register('nombredelasesion');

// Enviamos las cabeceras al navegador, para que
// sepa que el documento es una imagen
header("Content-type: image/png");

// a la variable $codigo le damos el
// valor del código generado
$codigo=$_SESSION["cdg"];

// Creamos la imagen
$imagen=ImageCreate(7030); 

// Generamos el fondo gris 
$fondo_gris=ImageColorAllocate($imagen207207207); 

// Generamos el color de las letras (negro)
$letras_negras=ImageColorAllocate($imagen000); 

// Rellenamos la imagen con fondo gris
ImageFill($imagen00$fondo_gris); 

// Escribimos $codigo con letras negras
// de numero 5
ImageString($imagen51010$codigo$letras_negras); 

// Creamos la imagen *.png
ImagePng($imagen); 
?>

Me he dado cuenta que en Mozilla no coge la variable de session desde codigo.php y en internet explorer si. Hay alguna forma de pasarsela?


¿Cual puede ser el motivo por el que en mozilla me lo muestre sin codigo y en INternet explorer me lo muestre todo sin problemas?

Os dejo la url donde viene los archivos por si me podeis aclarar el por que ocurre esto.
http://cruzlievano.com/blog/articulo..._aleatoria.php

Un Saludo y Gracias

Última edición por Taurus427; 08/08/2006 a las 18:35
  #2 (permalink)  
Antiguo 08/08/2006, 18:41
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 12 años, 9 meses
Puntos: 33
De acuerdo

Ignoro que esta haciendo tu script, pero normalmente para incluir un script tienes que hacer uso de include()

Saludillos.
  #3 (permalink)  
Antiguo 08/08/2006, 18:44
 
Fecha de Ingreso: agosto-2003
Mensajes: 398
Antigüedad: 14 años, 3 meses
Puntos: 0
Si, pero fijate en la url que te adjunto el archivo codigo.php genera una imagen y la forma que el autor dice para llamarla es mediante <img src="codigo.php">

El problema es que mozilla no me lee la session que tengo dentro de codigo.php.

Y no se cual puede ser la solucion.
¿Alguna idea?
Un Saludo y Gracias
  #4 (permalink)  
Antiguo 08/08/2006, 18:46
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Me he dado cuenta que en Mozilla no coge la variable de session desde codigo.php y en internet explorer si. Hay alguna forma de pasarsela?
Olvidate de que usas ese còdigo y de las "imagenes" que generas con el dinámicamente.

Tu problema está en la propagación del SID (Identificador Único de sesiones). .. Es decir, problema con sesiones.

El código que presentas hace mal uso de sesiones cuando hace:

// Le damos un nombre
session_register('nombredelasesion');

y luego usa $_SESSION ..

NOOOO debes usar "session_register()" .. esa funciòn no dà nombre a la sesión (en su defecto sería: session_name() y se define -antes- de session_start()) .. en definitiva .. y para evitarte lios, quita esa línea de código.

Por lo demás el código "asume" que se propaga el SID en cookies (por qué el mismo código no lo hace manualmente). Por ende .. tienes que permitir (aceptar) la cookie que el uso de sesiones va generar para propagar el SID .. así mismo revisar que tu servidor esté configurado (php.ini) para propagar el SID en cookies: session.use_cookies = ON .. y session.use_trans_sid = 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 08/08/2006, 18:54
 
Fecha de Ingreso: agosto-2003
Mensajes: 398
Antigüedad: 14 años, 3 meses
Puntos: 0
Hola Cluster, pero en Internet explorer funciona y en mozilla no, no creo que sea problema del servidor sino del codigo no?

Como podria corregirlo para pasar la session por url por ejemplo?

Un Saludo y gracias por la ayuda
  #6 (permalink)  
Antiguo 08/08/2006, 18:55
 
Fecha de Ingreso: agosto-2003
Mensajes: 398
Antigüedad: 14 años, 3 meses
Puntos: 0
He añadido esta linea de codigo sustituyendo la anterior

session_name('nombredelasesion');
session_start();

// Enviamos las cabeceras al navegador, para que
// sepa que el documento es una imagen
header("Content-type: image/png");
Pero sigue sin recoger el valor

¿Que hago mal?
Un Saludo
  #7 (permalink)  
Antiguo 08/08/2006, 18:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Te mencioné que te olvides de "session_name()" .. (no sòlo se deberìa colocar en ese script .. sino en el que valida tamibèn y en general en todos los que use sesiones) .. Pero, hasta que domines esto .. -olvidate- .. Sólo hacía el comentario que el uso de sesiones no es correcto.

Si en cierto navegador funciona y en otro no .. con más razón se hace necesario que averigües como acepta cookies tu navegador que no funciona tu sistema .. por qué el SID se está propagando en una COOKIE. De hecho también debes verificar la configuración de sesiones de PHP (php.ini) que te mencioné (y nunca "descartar" o "asumir" nada .. siempre -verificarlo-).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 08/08/2006, 19:00
 
Fecha de Ingreso: agosto-2003
Mensajes: 398
Antigüedad: 14 años, 3 meses
Puntos: 0
He quitado la linea de codigo que me has indicado y sigue igual en mozilla no lee la variable de session y en internet explorer si.

Como la puedo propagar que no sea por cookies?

Saludos
  #9 (permalink)  
Antiguo 08/08/2006, 19:06
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 Taurus427 Ver Mensaje
He quitado la linea de codigo que me has indicado y sigue igual en mozilla no lee la variable de session y en internet explorer si.

Como la puedo propagar que no sea por cookies?

Saludos
Pero por qué no revisas si tu Mozilla está aceptando cookies? .. No crees que será mejor que llegues al fondo del problema que intentar "parchearlo".

Sabias que la propagación del SID en el URL NO ES SEGURO! .. vs a su propagación en cookies? .. Ese es un argumento para no evadir tu problema ..

De todas formas .. no sé que tanto conoces las sesiones .. la documentación oficial está en:

www.php.net/session

Ahí versa como usar SID como constante que es para componer tus links/redirecconamientos/formularios .. para propagar el dichoso SID.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 08/08/2006, 19:09
 
Fecha de Ingreso: agosto-2003
Mensajes: 398
Antigüedad: 14 años, 3 meses
Puntos: 0
Si, le tengo al mozilla que acepte todas las cookies, fue lo primero que hice cuando me dijiste lo de las cookies, voy a ver si con esa documentacion encuentro como pasarle de algun modo la url. Gracias por la ayuda

Un Saludo
  #11 (permalink)  
Antiguo 08/08/2006, 19:16
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 Taurus427 Ver Mensaje
Si, le tengo al mozilla que acepte todas las cookies, fue lo primero que hice cuando me dijiste lo de las cookies, voy a ver si con esa documentacion encuentro como pasarle de algun modo la url. Gracias por la ayuda

Un Saludo
Hay que ver que tipo de cookie acepta .. Por ejemplo el "nivel de seguridad" de muchos navegadores -deniegan- las cookies tipo "sesión" y otras no seguras. Tendrìas que evaluar bien esa situación .. sino, sistemas que propagan el SID en cookies (como la mayorìa que usan sesiones en PHP) no te funcionaran en tu navegador Mozilla.

Por otro lado .. la propagación del SID en el URL en un formulario se harìa tipo:
Código PHP:
<input type="hidden" name="<? echo session_name() ?>" value="<? echo session_id() ?>">
Y en un link (usando la constante SID que devuelve nombresesion=idsesion):

Código PHP:
<a href="nose.php?"<? echo SID ?>>ir a nose</a>
Insisto que este método NO ES SEGURO!

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #12 (permalink)  
Antiguo 08/08/2006, 19:26
 
Fecha de Ingreso: agosto-2003
Mensajes: 398
Antigüedad: 14 años, 3 meses
Puntos: 0
Aun asi no funciona cluster, no se que falla, pero propagandola por url tampoco va y eso que si le doy un valor a la variable $codigo quitanto la session me muestra el código. No puedo pasarsela por fomr por que es para validar el formulario y la imagen la genera al general el formulario.

Lo he dejado todo asi:

session_start();

header("Content-type: image/png");

$codigo=$_SESSION["cdg"];

// Creamos la imagen
$imagen=ImageCreate(70, 30);

// Generamos el fondo gris
$fondo_gris=ImageColorAllocate($imagen, 207, 207, 207);

// Generamos el color de las letras (negro)
$letras_negras=ImageColorAllocate($imagen, 0, 0, 0);

// Rellenamos la imagen con fondo gris
ImageFill($imagen, 0, 0, $fondo_gris);

// Escribimos $codigo con letras negras
// de numero 5
ImageString($imagen, 5, 10, 10, $codigo, $letras_negras);

// Creamos la imagen *.png
ImagePng($imagen);



Y a la imagen que genera la llamo <img src="codigo.php">

Al mozilla le he dado que acepte todas las cookies pero sigue sin recoger la variable.

He mirado lo de la constante de session y he probado lo de propagarla por SID pero nada.

Un Saludo y Gracias
  #13 (permalink)  
Antiguo 08/08/2006, 19:39
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero asì no estàs propagando el SID en el URL ..

Claro que usas un formulario .. (según el tutorial que presentas) .. es ahì donde ya debes ir propagando el SID (como te expuse antes con la versión campo hidden de formulario)

Ese formulario habla de un "enviar.php" pero luego tiene otro "validar_codigo.php" (Realmente la tècnica es buena.. pero tiene sus detalles de "redacciòn" y errores en el còdigo .. OJOOO!, avisen al autor para que haga las modificaciones pertinentes)

Y luego tienes que hacerlo tambièn en el LINK que generas hacia tu codigo.php en ese tag de imagen HTML ..

Código PHP:
<img src="codigo.php?<? echo SID ?>">

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #14 (permalink)  
Antiguo 08/08/2006, 19:46
 
Fecha de Ingreso: agosto-2003
Mensajes: 398
Antigüedad: 14 años, 3 meses
Puntos: 0
Hola cluster me he dado cuenta de que el problema es que tengo dos sessiones a la vez y quizas no coja los datos correctos. Tengo una session que me crea el osccomerce y otra que crea el codigo este que te he enseñado.

Puedo registrarle las variables o llamar de alguna manera a la session que crea el osccomerce?
Un Saludo
  #15 (permalink)  
Antiguo 08/08/2006, 19:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Puedo registrarle las variables o llamar de alguna manera a la session que crea el osccomerce?

Pufffff! .. nunca hablastes de -otra- aplicación por mèdio!!!!!!! (intenta exponer todas las condiciones de uso cuando presentes un problema en el foro).

Bueno .. en ese caso si, .. es necesario definir un nombre para la sesiòn personalizado o usar la sesiòn activa que ya habrà creado "osCommerce" .. el caso es que no tengo idea como osCommerce genera sus sesiones, como las registra ni como propaga el SID (tal vez lo haga en el URL ya? .. no sè).

Para definir una sesión aparte .. tendrìas que usar en los scripts que usen sesiones tuyos:

Código PHP:
session_name('nombredelasesion');
session_start(); 
Pero esto no tiene efecto si ya usas otra sesiòn por encima de esta ..

Realmente no sè como pretendes usar tu còdigo .. lo "incluyes" bajo otro script própio de osCommerce? .. o de un link de osCommerce saltas a este formulario? ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #16 (permalink)  
Antiguo 08/08/2006, 19:54
 
Fecha de Ingreso: agosto-2003
Mensajes: 398
Antigüedad: 14 años, 3 meses
Puntos: 0
Si viene algo como tep_session_register('language')

if (!function_exists('session_start')) {
define('PHP_SESSION_NAME', 'osCsid');
define('PHP_SESSION_PATH', $cookie_path);
define('PHP_SESSION_DOMAIN', $cookie_domain);
define('PHP_SESSION_SAVE_PATH', SESSION_WRITE_DIRECTORY);

include(DIR_WS_CLASSES . 'sessions.php');
}

Un Saludo
  #17 (permalink)  
Antiguo 08/08/2006, 20:13
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Justamente asì fuerza la propagaciòn del SID en cookies (y define propiedades de la cookie pròpias).

Insisto que no conozco osCommerce ni como trabaja sus sesiones .. tendrìas que evaluarlo tu y seguir la misma lìnea si vas a usar el còdigo propuesto anteriormente en conjunto con los scripts que usa osCommerce.

(Por cierto no aclaras como intentas usar ese còdigo dentro del de algun script de osCommerce).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #18 (permalink)  
Antiguo 08/08/2006, 20:19
 
Fecha de Ingreso: agosto-2003
Mensajes: 398
Antigüedad: 14 años, 3 meses
Puntos: 0
Ok, cuando acabe el código lo posteare aqui para que lo puedan usar. Supongo que con que averigue como regustrar la variable en la variable de session de oscomerce todo quedaria resuelto. Un Saludo
  #19 (permalink)  
Antiguo 08/08/2006, 22:34
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 11 años, 11 meses
Puntos: 5
Buenas, no sé si lo habrás hecho ya, pero una prueba muy simple para descartar un error sería cambiar esta línea:

Código PHP:
$codigo=$_SESSION["cdg"]; 
por

Código PHP:
$codigo="prueba"
Parece una tontería, pero hace poco tuve que hacer algo con gd y no conseguía que el IE mostrara la imagen; luego de vaaaarias horas de probar mil cosas, descubrí que el problema estaba en que el IE no me reconocía el content-type
"image/jpg" ( sólo entiende "image/jpeg", con la "e").

No sé si ya lo habrás probado, pero podrías si no también comentar la línea del header y la última (ImagePng($imagen);), que imprime la imágen, y hacer un echo de $_SESSION['cdg'] para confirmar si efectivamente el problema está en el manejo de sesiones. (Digo, para "atacar" un frente a la vez)

Suerte
Califa
  #20 (permalink)  
Antiguo 09/08/2006, 08:01
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 califa010 Ver Mensaje
Buenas, no sé si lo habrás hecho ya, pero una prueba muy simple para descartar un error sería cambiar esta línea:

Código PHP:
$codigo=$_SESSION["cdg"]; 
por

Código PHP:
$codigo="prueba"
Parece una tontería, pero hace poco tuve que hacer algo con gd y no conseguía que el IE mostrara la imagen; luego de vaaaarias horas de probar mil cosas, descubrí que el problema estaba en que el IE no me reconocía el content-type
"image/jpg" ( sólo entiende "image/jpeg", con la "e").

No sé si ya lo habrás probado, pero podrías si no también comentar la línea del header y la última (ImagePng($imagen);), que imprime la imágen, y hacer un echo de $_SESSION['cdg'] para confirmar si efectivamente el problema está en el manejo de sesiones. (Digo, para "atacar" un frente a la vez)

Suerte
Califa
mm Podría ser problema de cabeceras .. y el checkeo sería bueno hacerlo igualmente para ver si hay problemas con sesiones realmente (es decir .. ver si el dato se propaga en esa variable de sesión y/o si funcionan las generación de imagenes en sí bajo Mozilla).

Pero .. dice el comentario inicial algo como:
Cita:
En INternet Explorer me muestra correctamente la imagen, sin embargo en Mozilla solo me muestra la imagen en fondo gris sin que aparezca ningun codigo.
Así que GD estaría trabajando .. de alguna forma ...

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 09:24.