Foros del Web » Programando para Internet » PHP »

Problema con Sesión

Estas en el tema de Problema con Sesión en el foro de PHP en Foros del Web. Hola a Todos. Estoy pasando mi host a HostGator, y hablé y hablé con los técnicos sobre un Capcha que anda mal, y lo que ...
  #1 (permalink)  
Antiguo 12/08/2010, 13:28
 
Fecha de Ingreso: abril-2010
Ubicación: Ping: BSAS - Arg
Mensajes: 791
Antigüedad: 14 años, 7 meses
Puntos: 25
Problema con Sesión

Hola a Todos.
Estoy pasando mi host a HostGator, y hablé y hablé con los técnicos sobre un Capcha que anda mal, y lo que encontré es que los errores que aparecian eran por una mal estructuración de la seción.

El Código de Captcha es:

Código PHP:
###########################################################################################
    #
    #  CAPTCHA FÁCIL 1.0
    #
    #  Autor: Alejandro Martín Núñez
    #  Contact: alemnunez at gmail dot com
    #  Date: October 10, 2009
    #
    #  COMO USAR CAPTCHA FÁCIL
    #
    #  FORMULARIO
    #  En el formulario que deseas validar, inserta el siguiente código:
    #  
    #  <img src="captcha.php" /><br/>
    #  <input type="text" size="12" name="captcha" />
    #
    #
    #  VERIFICACIÓN
    #  Al procesar el formulario, compara el contenido del campo que 
    #  completó el usuario con el contenido de $_SESSION["captcha"] 
    #  que generó este programa:
    #
    #  session_start();
    #  if(strtoupper($_REQUEST["captcha"]) == $_SESSION["captcha"]){
    #     // REMPLAZO EL CAPTCHA USADO POR UN TEXTO LARGO PARA EVITAR QUE SE VUELVA A INTENTAR
    #     $_SESSION["captcha"] = md5(rand()*time());
    #      // INSERTA EL CÓDIGO EXITOSO AQUI
    #  }else{
    #     // REMPLAZO EL CAPTCHA USADO POR UN TEXTO LARGO PARA EVITAR QUE SE VUELVA A INTENTAR
    #     $_SESSION["captcha"] = md5(rand()*time());
    #      // INSERTA EL CÓDIGO DE ERROR AQUÍ
    #  }
    #
    #  
    #  OLVIDÁ EL SPAM!
    #
    ###########################################################################################
    
    #create image and set background color
    
$captcha imagecreatetruecolor(120,35);
    
$background_color imagecolorallocate($captcha255255255);
    
imagefill($captcha00$background_color);
    
    
#generate a random string of 5 characters
    
$string substr(md5(rand()*time()),0,5);

    
#make string uppercase and replace "O" and "0" to avoid mistakes
    
$string strtoupper($string);
    
$string str_replace("O","B"$string);
    
$string str_replace("0","C"$string);

    
#save string in session "captcha" key
    
session_start();
    
$_SESSION["captcha"]=$string;

    
#place each character in a random position
    
$font 'arial.ttf';
    for(
$i=0;$i<5;$i++){
        
$color rand(0,32);
        if(
file_exists($font)){
            
$x=4+$i*23+rand(0,6);
            
$y=rand(18,28);
            
imagettftext  ($captcha15rand(-25,25), $x$yimagecolorallocate($captcha$color$color$color), $font$string[$i]);
        }else{
            
$x=5+$i*24+rand(0,6);
            
$y=rand(1,18);
            
imagestring($captcha5$x$y$string[$i], imagecolorallocate($captcha$color$color$color));
        }
    }
    
    
#applies distorsion to image
    
$matrix = array(array(111), array(1.071.0), array(111));
    
imageconvolution($captcha$matrix1632);

    
#avoids catching
    
header("Expires: 0");
    
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    
header("Cache-Control: private",false); 

    
#return the image
    
header("Content-type: image/gif");
    
imagejpeg($captcha); 
El tema es que este código en windows funcionó perfecto, pero desde que me pasé a hostgator (linux) comensó a tirar miles de errores.

Los técnicos me indicaron que poniendo un cierre de sesión iva a funcionar, y fue así.
Pero el problema surje que me rebota y no compara correctamente el formulario con el captcha (antes si andaba todo bien).

Donde tiene que cerrar sesión? Hay algo mal en el código que lo puede hacer incompatible con linux? (Fuera del cierre de sesión obligado).
  #2 (permalink)  
Antiguo 12/08/2010, 13:34
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Problema con Sesión

pues no amigo...

acabo de probar este script en mi sistema Linux y no hay errores... ¿donde? ¿cuales?

y de verdad... funciona perfecto!!

con respecto a lo de tu sesión, seguro el problema esta en otro lado... aunque, recuerda que cada ves que se ejecuta session_start() se reinicia la sesión...

así que deberías pensar, ¿en que otros lugares ejecutas dicha función?

por lo mientras, no tienes que echar culpa a este script...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 12/08/2010, 14:00
 
Fecha de Ingreso: abril-2010
Ubicación: Ping: BSAS - Arg
Mensajes: 791
Antigüedad: 14 años, 7 meses
Puntos: 25
Respuesta: Problema con Sesión

Cita:
Iniciado por pateketrueke Ver Mensaje
pues no amigo...

acabo de probar este script en mi sistema Linux y no hay errores... ¿donde? ¿cuales?

y de verdad... funciona perfecto!!

con respecto a lo de tu sesión, seguro el problema esta en otro lado... aunque, recuerda que cada ves que se ejecuta session_start() se reinicia la sesión...

así que deberías pensar, ¿en que otros lugares ejecutas dicha función?

por lo mientras, no tienes que echar culpa a este script...
Entonces me chamullaron jajaj.

Código PHP:
if (!preg_match("/^[a-zA-Z_-]+$/"$Fname) || strlen($Fname) == "0") {
header ("Location: $directorio/$idiomaurl.php?error=nom");
}elseif (!
preg_match("/^[a-zA-Z_-]+$/"$Lname) || strlen($Lname) == "0") {
header ("Location: $directorio/$idiomaurl.php?error=ape");
}elseif (!
eregi('^([a-zA-Z0-9\._-]+)\@([a-zA-Z0-9\.]+)\.([a-zA-Z]{2,4})$',$Mail)) { 
header ("Location: $directorio/$idiomaurl.php?error=mail");
}elseif (
$Genere == ''){
header ("Location: $directorio/$idiomaurl.php?error=ge");
[
B]}elseif(strtoupper($_REQUEST["captcha"]) == $_SESSION["captcha"]){[/B]
// REMPLAZO EL CAPTCHA USADO POR UN TEXTO LARGO PARA EVITAR QUE SE VUELVA A INTENTAR
[B]$_SESSION["captcha"] = md5(rand()*time());[/B]


mysql_query(" // DATABASE



header ("
Location// REDIRECT

}else{
// REMPLAZO EL CAPTCHA USADO POR UN TEXTO LARGO PARA EVITAR QUE SE VUELVA A INTENTAR
[B]$_SESSION["captcha"] = md5(rand()*time());[/B]
// INSERTA EL CÓDIGO DE ERROR AQUÍ
header ("Location: $directorio/$idiomaurl.php?error=capcha");

Este es un If que verifica todos los campos del formulario (html) y al principio de la web hay una autentificación:

session_start();
  #4 (permalink)  
Antiguo 12/08/2010, 14:10
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Problema con Sesión

mira, si crees que segmentando tu error y omitiendo cosas tales como el inicio de sesión, ¿que piensas?

- es tan simple que deben contemplarlo ya...
- es algo que saben que debo tener, y lo tengo por eso lo omito

si esperas algún tipo de solución, mientras das por hecho que "sabemos" ciertas partes de tu script... ¿o porque razón las omites?

así nadie te va a ayudar... de verdad, quieres ayuda completa... trata de dar la información completa!!

ya ni que pensar... con la forma en la que llevas tu cuestión ni dan ganas de poner atención...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 12/08/2010, 14:40
 
Fecha de Ingreso: abril-2010
Ubicación: Ping: BSAS - Arg
Mensajes: 791
Antigüedad: 14 años, 7 meses
Puntos: 25
Respuesta: Problema con Sesión

Cita:
Iniciado por pateketrueke Ver Mensaje
mira, si crees que segmentando tu error y omitiendo cosas tales como el inicio de sesión, ¿que piensas?

- es tan simple que deben contemplarlo ya...
- es algo que saben que debo tener, y lo tengo por eso lo omito

si esperas algún tipo de solución, mientras das por hecho que "sabemos" ciertas partes de tu script... ¿o porque razón las omites?

así nadie te va a ayudar... de verdad, quieres ayuda completa... trata de dar la información completa!!

ya ni que pensar... con la forma en la que llevas tu cuestión ni dan ganas de poner atención...
Jajaj, tienes razon. Es muy egoista de mi parte pedir ayuda y no compartir nada.
Pasa que en el mismo blog de Maestros del Web se discute esta temática.
Igual, no pasa nada, solamente es un sistema de administración.

Este es el PHP que Procesa la Info:

Código PHP:
// Conectarse a la Database SQL e Iniciar Seción en Capcha

session_start();

include(
'conec.php');
include(
'getip.php');

date_default_timezone_set('GTM');
      

// Tomar las Variables desde URL

    
$Fname $_POST["nombre"];
    
$Lname $_POST["apellido"];
    
$Mail $_POST["mail"];
    
$Genere $_POST["sexo"];
    
$Host2 $_POST["servidor"];
    
$Port "80";
    
$IPOwner getRealIP();
    
$Pay "0";
    
$Method "None";
    
$TimeCreate date("c");

// Separar Guiones en Diferentes Variables

$hostsinseparar $Host2
$separado explode('-',$hostsinseparar);

// Quitar Espacios en Blanco
$espacio_sinespacio trim($separado[0]);
$condicionesuso_sinespacio trim($separado[1]);
$entregavariables_sinespacio trim($separado[2]);

// Separar Intervinculo

$Intervinculo trim($separado[3]);

// Definir Host para Guardar en SQL
$Host $nombresindominio

// Crear Nombre del Host con el dominio
$separadoporbarradiagonal explode('/',$entregavariables_sinespacio);
$nombredelhost trim($separadoporbarradiagonal[0]);

// Crear Nombre del Host con el dominio y acc (acc.midominio.com)
$nombredelhostconacc 'acc.'.$nombredelhost;


// Crear Nombre del Host sin el dominio
$separadorpunto explode('.',$nombredelhost);
$nombresindominio trim($separadorpunto[0]);

// Si es espacio es Igual a 0, mostrar ilimitado.
if ($espacio_sinespacio == 0)
{
$espacio_sinespacio2 'Ilimitado';
}else{
$espacio_sinespacio2 $espacio_sinespacio.' GB';
}

// Mostrar Variables Finales

// echo $espacio_sinespacio.'<< si estos guiones están al lado de la variable, entonces está todo bien.'.'<br>';
// echo $Host.'<< si estos guiones están al lado de la variable, entonces está todo bien.'.'<br>';
// echo $entregavariables_sinespacio.'<< si estos guiones están al lado de la variable, entonces está todo bien.'.'<br>';

// Generar Aleatoriamente un Código

function Gen_Cod_Aleatorio()
{
$Usuario "abcdefghjkmnpqrstuvwxyz123456789";
$Aleatorio str_shuffle($Usuario);
$Aleatorio substr($Aleatorio,0,12);
$Aleator $Aleatorio;
return 
$Aleator;
}

$Aleatorio Gen_Cod_Aleatorio();
Gen_Cod_Aleatorio_Verify_User($Aleatorio);

function 
Gen_Cod_Aleatorio_Verify_User($AleaUs){
$wea mysql_query("SELECT UserAcc FROM ActivesAcc where UserAcc ='$AleaUs'");
$row mysql_fetch_row($wea);
if (
$row[0] != ""){ 
Gen_Cod_Aleatorio_Verify_User($Aleatorio);
} else { 
return 
$AleaUs;
}}

$Aleatorio2 Gen_Cod_Aleatorio();
Gen_Cod_Aleatorio_Verify_Pass($Aleatorio2);

function 
Gen_Cod_Aleatorio_Verify_Pass($AleaPass){
$wea mysql_query("SELECT PasswordAcc FROM ActivesAcc where PasswordAcc ='$AleaPass'");
$row mysql_fetch_row($wea);
if (
$row[0] != ""){ 
Gen_Cod_Aleatorio_Verify_Pass($Aleatorio2);
} else { 
return 
$AleaPass;
}}


// Muestra de lo que se Genera y que las Variables son Enviadas.
// $Us = Gen_Cod_Aleatorio_Verify_User($Aleatorio);
// $Ps = Gen_Cod_Aleatorio_Verify_Pass($Aleatorio2);
// echo $Us.'     '.$Ps.'   Esto fue Generado al Azar.';

$UserAcc Gen_Cod_Aleatorio_Verify_User($Aleatorio);
$PasswordAcc Gen_Cod_Aleatorio_Verify_Pass($Aleatorio2);


// Validar el Formulario si fue completado correctamente



if (!preg_match("/^[a-zA-Z_-]+$/"$Fname) || strlen($Fname) == "0") {
header ("Location: $directorio/$idiomaurl.php?error=nom");
}elseif (!
preg_match("/^[a-zA-Z_-]+$/"$Lname) || strlen($Lname) == "0") {
header ("Location: $directorio/$idiomaurl.php?error=ape");
}elseif (!
eregi('^([a-zA-Z0-9\._-]+)\@([a-zA-Z0-9\.]+)\.([a-zA-Z]{2,4})$',$Mail)) { 
header ("Location: $directorio/$idiomaurl.php?error=mail");
}elseif (
$Genere == ''){
header ("Location: $directorio/$idiomaurl.php?error=ge");
}elseif(
strtoupper($_REQUEST["captcha"]) == $_SESSION["captcha"]){
// REMPLAZO EL CAPTCHA USADO POR UN TEXTO LARGO PARA EVITAR QUE SE VUELVA A INTENTAR
$_SESSION["captcha"] = md5(rand()*time());


mysql_query("INSERT INTO ActivesAcc
(Fname,Lname,Mail,Genere,Host,UserAcc,PasswordAcc,Port,IPOwner,Pay,Method,TimeCreate,Intervinculo) VALUES ('$Fname', '$Lname', '$Mail', '$Genere', '$nombresindominio', '$UserAcc', '$PasswordAcc', '$Port', '$IPOwner', '$Pay', '$Method', '$TimeCreate', '$Intervinculo')"
);


// Redireccionar entregando variables

header ("Location: $directorio/$idiomaurl-gracias.php?nombre=$Fname&urlacc=$linkacc&us=$UserAcc&con=$PasswordAcc&host=$nombredelhostconacc&port=$Port");


}else{
// REMPLAZO EL CAPTCHA USADO POR UN TEXTO LARGO PARA EVITAR QUE SE VUELVA A INTENTAR
$_SESSION["captcha"] = md5(rand()*time());
// INSERTA EL CÓDIGO DE ERROR AQUÍ
header ("Location: $directorio/$idiomaurl.php?error=capcha");

Este es el Link en el HTML al Captcha:

Código:
<table width="158" border="0" cellspacing="0" cellpadding="0">
                                                  <tr>
                                                    <td>&nbsp;</td>
                                                  </tr>
                                                  <tr>
                                                    <td><div align="center"><img src="captcha/captcha.php" /></div></td>
                                                  </tr>
                                                  <tr>
                                                    <td>&nbsp;</td>
                                                  </tr>
                                                  <tr>
                                                    <td><div align="center">
                                                      <input type="text" size="16" name="captcha" style="height:15px;color:grey" />
                                                    </div></td>
                                                  </tr>
                                                  <tr>
                                                    <td>&nbsp;</td>
                                                  </tr>
                                                  <tr>
                                                    <td><div align="center">
                                                      <input name="submit" type="submit" id="Enviar" value="Enviar" />
                                                    </div></td>
                                                  </tr>
                                                </table>
Y este es el Captcha en Si...

Código PHP:
    
    
#create image and set background color
    
$captcha imagecreatetruecolor(120,35);
    
$background_color imagecolorallocate($captcha255255255);
    
imagefill($captcha00$background_color);
    
    
#generate a random string of 5 characters
    
$string substr(md5(rand()*time()),0,5);

    
#make string uppercase and replace "O" and "0" to avoid mistakes
    
$string strtoupper($string);
    
$string str_replace("O","B"$string);
    
$string str_replace("0","C"$string);

    
#save string in session "captcha" key
    
session_start();
    
$_SESSION["captcha"]=$string;

    
#place each character in a random position
    
$font 'arial.ttf';
    for(
$i=0;$i<5;$i++){
        
$color rand(0,32);
        if(
file_exists($font)){
            
$x=4+$i*23+rand(0,6);
            
$y=rand(18,28);
            
imagettftext  ($captcha15rand(-25,25), $x$yimagecolorallocate($captcha$color$color$color), $font$string[$i]);
        }else{
            
$x=5+$i*24+rand(0,6);
            
$y=rand(1,18);
            
imagestring($captcha5$x$y$string[$i], imagecolorallocate($captcha$color$color$color));
        }
    }
    
    
#applies distorsion to image
    
$matrix = array(array(111), array(1.071.0), array(111));
    
imageconvolution($captcha$matrix1632);

    
#avoids catching
    
header("Expires: 0");
    
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    
header("Cache-Control: private",false); 

    
#return the image
    
header("Content-type: image/gif");
    
imagejpeg($captcha); 
Que lo saqué de Aca:

http://www.captchafacil.com.ar/



Disculpa pateketrueke.

Etiquetas: sesión
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 02:18.