Foros del Web » Programando para Internet » PHP »

Variables de Sesion en Capcha

Estas en el tema de Variables de Sesion en Capcha en el foro de PHP en Foros del Web. Saludos Tengo un problema con el archivo de inclusión de un capcha. Todo funciona bien, la imagen se muestra y alterna con cada refresh del ...
  #1 (permalink)  
Antiguo 25/05/2009, 14:09
Avatar de José Molina  
Fecha de Ingreso: enero-2002
Ubicación: USA
Mensajes: 768
Antigüedad: 22 años, 4 meses
Puntos: 1
Variables de Sesion en Capcha

Saludos

Tengo un problema con el archivo de inclusión de un capcha.

Todo funciona bien, la imagen se muestra y alterna con cada refresh del navegador, pero las sesiones que están declaradas dentro del archivo PHP no pueden ser leidas.

Cuando se coloca por ejemplo < img src=capcha.php > se dibuja la imagen, pero no puedo hacer un if ($_SESSION["talcosa"]) .... porque esa variable de sesion no se ve.

Si hago un include ("capcha.php") la imagen no se ve, pero el echo de la sesion si.

Alguna idea??

Gracias
__________________
José Molina
La marginalidad no esta en la incapacidad de calmar el hambre de un estómago sino en la incapacidad de calmar el hambre de la mente.
  #2 (permalink)  
Antiguo 25/05/2009, 21:13
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
Respuesta: Variables de Sesion en Capcha

Creo deberías explicar un poco más la situación. Básicamente ¿dónde "no se ve" la sesión?, ¿dónde la declaras?, ¿qué hace --a grandes rasgos-- el script involucrado?.
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #3 (permalink)  
Antiguo 26/05/2009, 09:40
Avatar de José Molina  
Fecha de Ingreso: enero-2002
Ubicación: USA
Mensajes: 768
Antigüedad: 22 años, 4 meses
Puntos: 1
Respuesta: Variables de Sesion en Capcha

Saludos

Tienes razón, como el tema de los capcha es bastante común hoy día y todos trabajan prácticamente igual, asumi que no era necesario, mil disculpas.

Tratare de dejar un poco más de detalle esta vez:

Tengo un archivo llamado kcapcha.php el cual contiene:

Código PHP:
class KCAPTCHA{
function 
KCAPTCHA(){
   require(
dirname(__FILE__).'/kcaptcha_config.php');
   
$fonts=array();
   
$fontsdir_absolute=dirname(__FILE__).'/'.$fontsdir;
   if (
$handle opendir($fontsdir_absolute)) {
       while (
false !== ($file readdir($handle))) {
           if (
preg_match('/\.png$/i'$file)) {
                          
$fonts[]=$fontsdir_absolute.'/'.$file;
           }
       }
       
closedir($handle);
   }

   
$alphabet_length=strlen($alphabet);

   while(
true){
       while(
true){
            
$this->keystring='';
            for(
$i=0;$i<$length;$i++){ 
              
$this->keystring.=$allowed_symbols{mt_rand(0,strlen($allowed_symbols)-1)};
            }
            if(!
preg_match('/cp|cb|ck|c6|c9/',$this->keystring)) break;
       }

       
$font_file=$fonts[mt_rand(0,count($fonts)-1)];
       
$font=imagecreatefrompng($font_file);
       
imagealphablending($fontfalse);
       
imagesavealpha($fonttrue);
       
$black=imagecolorallocate($font,0,0,0);
       
$fontfile_width=imagesx($font);
       
$fontfile_height=imagesy($font)-1;
       
$font_metrics=array();
       
$symbol=0;
       
$reading_symbol=false;

       for(
$i=0;$i<$fontfile_width && $symbol<$alphabet_length;$i++){
          
$transparent = (imagecolorat($font$i0) >> 24) == 127;
          if(!
$reading_symbol && !$transparent){             zfont_metrics[$alphabet{$symbol}]=array('start'=>$i);
             
$reading_symbol=true;
             continue;
          }

           if(
$reading_symbol && $transparent){
              
$font_metrics[$alphabet{$symbol}]['end']=$i;
              
$reading_symbol=false;
              
$symbol++;
              continue;
           }
}

       
$img=imagecreatetruecolor($width,$height);
       
$white=imagecolorallocate($img,255,255,255);
       
$black=imagecolorallocate($img,0,0,0);

       
imagefilledrectangle ($img,0,0,$width-1,$height-1,$white);

       
$x=1;
       for(
$i=0;$i<$length;$i++){
           
$m=$font_metrics[$this->keystring{$i}];

           
$y=mt_rand(-$fluctuation_amplitude$fluctuation_amplitude)+($height-$fontfile_height)/2+2;
           if(
$no_spaces){
                
$shift=0;
                if(
$i>0){
                     
$shift=1000;
                         for(
$sy=1;$sy<$fontfile_height-15;$sy+=2){
                                for(
$sx=$m['start']-1;$sx<$m['end'];$sx++){
                                      
$rgb=imagecolorat($font$sx$sy);
                                      
$opacity=$rgb>>24;
                                      if(
$opacity<127){
                                         
$left=$sx-$m['start']+$x;
                                         
$py=$sy+$y;
                                         for(
$px=min($left,$width-1);$px>$left-15 && $px>=0;$px--){
                                            
$color=imagecolorat($img$px$py) & 0xff;
                                            if(
$color+$opacity<190){
                                               if(
$shift>$left-$px){                                     
                                                   
$shift=$left-$px;
                                               }
                                               break;
                                               }
                                               }
                                                break;                                                }
                                             }
                                        }
                                    }
                                             }else{
                                               
$shift=1;
                                               }
                             
imagecopy($img,$font,$x-$shift,$y,$m['start'],1,$m['end']-$m['start'],$fontfile_height);
                              
$x+=$m['end']-$m['start']-$shift;
                               }
                               if(
$x<$width-10) break; // fit in canvas
               
}
               
$center=$x/2;

              
$img2=imagecreatetruecolor($width$height+($show_credits?'12':0));
               
$foreground=imagecolorallocate($img2$foreground_color[0], $foreground_color[1], $foreground_color[2]);
               
$background=imagecolorallocate($img2$background_color[0], $background_color[1], $background_color[2]);
               
imagefilledrectangle($img20$height$width-1$height+12$foreground);
               
$credits=empty($credits)?$_SERVER['HTTP_HOST']:$credits;
               
imagestring($img22$width/2-ImageFontWidth(2)*strlen($credits)/2$height-2$credits$background);

               
$rand1=mt_rand(700000,1000000)/10000000;
               
$rand2=mt_rand(700000,1000000)/10000000;
               
$rand3=mt_rand(700000,1000000)/10000000;
               
$rand4=mt_rand(700000,1000000)/10000000;
               
// phases
               
$rand5=mt_rand(0,3141592)/1000000;
               
$rand6=mt_rand(0,3141592)/1000000;
               
$rand7=mt_rand(0,3141592)/1000000;
               
$rand8=mt_rand(0,3141592)/1000000;
               
// amplitudes
               
$rand9=mt_rand(300,420)/110;
               
$rand10=mt_rand(300,450)/110;

               for(
$x=0;$x<$width;$x++){
                   for(
$y=0;$y<$height;$y++){
                        
$sx=$x+(sin($x*$rand1+$rand5)+sin($y*$rand3+$rand6))*$rand9-$width/2+$center+1;
                         
$sy=$y+(sin($x*$rand2+$rand7)+sin($y*$rand4+$rand8))*$rand10;

                           if(
$sx<|| $sy<|| $sx>=$width-|| $sy>=$height-1){
                              
$color=255;
                              
$color_x=255;
                              
$color_y=255;
                              
$color_xy=255;
                           }else{
                              
$color=imagecolorat($img$sx$sy) & 0xFF;
                              
$color_x=imagecolorat($img$sx+1$sy) & 0xFF;
                              
$color_y=imagecolorat($img$sx$sy+1) & 0xFF;
                              
$color_xy=imagecolorat($img$sx+1$sy+1) & 0xFF;
                           }

                           if(
$color==&& $color_x==&& $color_y==&& $color_xy==0){
                              
$newred=$foreground_color[0];
                              
$newgreen=$foreground_color[1];
                              
$newblue=$foreground_color[2];
                           }else if(
$color==255 && $color_x==255 && $color_y==255 && $color_xy==255){
                              
$newred=$background_color[0];
                              
$newgreen=$background_color[1];
                              
$newblue=$background_color[2];
                           }else{
                              
$frsx=$sx-floor($sx);
                              
$frsy=$sy-floor($sy);
                              
$frsx1=1-$frsx;
                              
$frsy1=1-$frsy;
                              
$newcolor=(
                                  
$color*$frsx1*$frsy1+
                                  
$color_x*$frsx*$frsy1+
                                  
$color_y*$frsx1*$frsy+
                                  
$color_xy*$frsx*$frsy);

                                  if(
$newcolor>255$newcolor=255;
                                  
$newcolor=$newcolor/255;
                                  
$newcolor0=1-$newcolor;
                                                                             
$newred=$newcolor0*$foreground_color[0]+$newcolor*$background_color[0];                                             $newgreen=$newcolor0*$foreground_color[1]+$newcolor*$background_color[1];
                                                                       
$newblue=$newcolor0*$foreground_color[2]+$newcolor*$background_color[2];
                                               }

                                               
imagesetpixel($img2$x$yimagecolorallocate($img2,$newred,$newgreen,$newblue));
                               }
               }
$_SESSION['captcha_keystring'] = $this->keystring;
                                               
   if(
function_exists("imagejpeg")){
       
header("Content-Type: image/jpeg");
       
imagejpeg($img2null$jpeg_quality);
   }else if(
function_exists("imagegif")){
       
header("Content-Type: image/gif");
       
imagegif($img2);
   }else if(
function_exists("imagepng")){
       
header("Content-Type: image/x-png");
       
imagepng($img2);
   }                               
}

    function 
getKeyString(){
       return 
$this->keystring;
    }

Archivo index.php:
include('kcaptcha.php');

$captcha = new KCAPTCHA();
echo $_SESSION['captcha_keystring'];

archivo prueba.php:
<img src=”index.php”>


La imagen se ve por pantalla, pero la validación de la sesion no funciona. Si en esa misma página de prueba coloco un echo de la sesion que se crea dentro del archivo kcapcha.php no aparece nada por pantalla de la sesion, aún cuando la imagen si aparece y cambia con cada recarga de la página.

Dicha sesion es la que se esta creando en el archivo capcha.php. El mismo archivo que es colocado como fuente de la etiqueta < img > del archivo prueba.

Hace falta configurar algo extra en el servidor para que estas variables de sesion funcionen correctamente cuando se manejan los archivos de esta forma??

Gracias
__________________
José Molina
La marginalidad no esta en la incapacidad de calmar el hambre de un estómago sino en la incapacidad de calmar el hambre de la mente.
  #4 (permalink)  
Antiguo 26/05/2009, 09:47
 
Fecha de Ingreso: octubre-2008
Mensajes: 71
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Variables de Sesion en Capcha

no sera session_start(); ?

podrias poner el codigo de donde lo llamas mas completo
  #5 (permalink)  
Antiguo 26/05/2009, 10:18
Avatar de José Molina  
Fecha de Ingreso: enero-2002
Ubicación: USA
Mensajes: 768
Antigüedad: 22 años, 4 meses
Puntos: 1
Respuesta: Variables de Sesion en Capcha

Saludos

Ya tiene el session_start();

Si en el archivo prueba.php coloco:

include ("index.php");

echo $_SESSION['captcha_keystring'];

Allí si se pinta la variable por pantalla, claro la imagen del capcha no se ve porque no esta dentro de la etiqueta IMG, pero las sesiones si se muestran bien.
__________________
José Molina
La marginalidad no esta en la incapacidad de calmar el hambre de un estómago sino en la incapacidad de calmar el hambre de la mente.
  #6 (permalink)  
Antiguo 26/05/2009, 14:22
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
Respuesta: Variables de Sesion en Capcha

Cita:
Iniciado por José Molina Ver Mensaje
Archivo index.php:
include('kcaptcha.php');

$captcha = new KCAPTCHA();
echo $_SESSION['captcha_keystring'];

archivo prueba.php:
<img src=”index.php”>
Viendo por encima tu código (que complica un poco leerlo la mala identación) tu clase lanza una imagen desde el constructor, con cabeceras y todo. Debido a eso, simplemente no puedes imprimir nada en donde la utilices, ese es tu error, querer hacer un echo donde no puedes.

La sesión está ahí, pero no puedes ni debes mandar otra salida al navegador en el archivo donde utilizas la clase.
www.php.net/header

Un saludo
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
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 11:33.