Jump to content


Photo

Captcha - Session


  • Faça o login para participar
5 replies to this topic

#1 rodrigo.rrch

rodrigo.rrch

    Novato no fórum

  • Usuários
  • 4 posts
  • Sexo:Masculino
  • Localidade:Araras - SP

Posted 13/12/2011, 13:55

Bom dia

tenho 2 arquivos php e estou validando com jquery enginer

segue os codigos

contato.php

// primeira linha do documento
<?php

// iniciou a sessão ?
if(!isset($_SESSION)){

    // inicia a sessão    
    session_start();

}
?>

// dentro do body

// inicia o form para mandar ao comentarioEnvia.php caso todos os dados seja validado
<form name="form" id="formID" action="comentarioEnvia.php" method="post">

//gera a img do captcha
<img id="img" src="Plugin/Captcha/captcha.php" width="130" height="40" />

//pego o valor do SESSION e coloco nesse input.. o type ta como text apenas para aparecer na tela
<input id="cap" type="text" name="valorCaptcha" value="<?php echo $_SESSION['textoCAPTCHA']?>"/>

//campo que compara com o valor pelo ID do input de cima 
<input id="palavras" type="text" name="captcha" size="12" class="validate[required] equals[cap] 
text-input" />

<div id="botao" align="center">    
    <input type="submit" name="submit" value="Enviar Comentario"/>
</div>
</form>


e

captcha.php

<?php
    
/**
* função CAPTCHA para diferenciar humanos de computadores
*/

function CAPTCHA(){
    
    // iniciou a sessão ?
    if(!isset($_SESSION)){
       
        // inicia a sessão
        session_start();
       
    }
    
    // definimos o header como image/png para que possamos visualizar a imagem
    header("Content-type: image/png");
    
    // retorna um identificador de imagem representando a imagem obtida através do nome de arquivo 
informado.
    $imagemCAPTCHA = imagecreatefrompng("captcha1.png");
    
    // carrega uma nova fonte
    $fontCAPTCHA = imageloadfont("anonymous.gdf");
    
    // criamos o texto que irá na imagem
    $textoCAPTCHA = substr(md5(uniqid(rand(), true)), -9,6);
    
    // guardamos o texto em uma session
    $_SESSION['textoCAPTCHA'] = $textoCAPTCHA; 
    
    // damos uma cor(RGB) para o texto
    $corCAPTCHA = imagecolorallocate($imagemCAPTCHA,255,000,000);
    
    // vamos escrever o texto na imagem.
    //imagestring("identificador da imagem","identificador da fonte","posição do texto na 
coordenada x",posição do texto na coordenada y","string texto","identificador de cor");
    imagestring($imagemCAPTCHA,$fontCAPTCHA,5,5,$textoCAPTCHA,$corCAPTCHA);
    
    // mostramos a imagem pronta
    imagepng($imagemCAPTCHA);
    
    // destruimos a imagem
    imagedestroy($imagemCAPTCHA);
}

// chamamos a função
CAPTCHA();

?>



Porem o que esta acontecendo é.. o valor da SESSION esta diferente ao valor do captcha.. pq isso ? coloquei uma imagem aqui para melhor explicar imagem

O Campo captcha é 3ccb57 mais a SESSION que tras no input é fb7e07 no campo logo abaixo ele compara certinho com o input..

Ainda to penando para entender a session.. ja vi o manual do php.. mais ainda não entro aqui..
minha maior duvida agora é essa.. pq a mesma session que gerou a img do captcha aparece outro valor em outro lugar ?

percebi que o valor que aparece no input é sempre o valor anterior que estava na img..

onde ta o problema ?

caso precisem do codigo que estou validando eu posto aqui tbm..

Estou estudando PHP sozinho.. desculpa se cometi alguma perola

Vlw

#2 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 13/12/2011, 18:14

Acontece que o contato.php é processado primeiro que o captcha.php. Primeiro o cliente recebe o HTML que o contato gera. Depois é que o navegador vai acessar o captcha pra gerar o código e baixar a imagem. Assim, o contato fica mesmo sempre atrasado, como você está vendo. Não se esqueça que o PHP não entende HTML. O HTML que você escreve o PHP manda direto pro navegador sem se importar. Quem vai entender o <img> e baixar a imagem é o cliente.

#3 rodrigo.rrch

rodrigo.rrch

    Novato no fórum

  • Usuários
  • 4 posts
  • Sexo:Masculino
  • Localidade:Araras - SP

Posted 14/12/2011, 07:41

Bom dia LeoB

Então se eu trazer a img que esta como html por php o problema sera resolvido ? ^^
//gera a img do captcha
<img id="img" src="Plugin/Captcha/captcha.php" width="130" height="40" />

qual a melhor forma de resolver isso ?
vou fazer mais uns testes aqui e ja edito postando o resultado

=)

Obrigado pela resposta

#4 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 14/12/2011, 09:18

Sua pergunta não faz sentido. E parece que você não entendeu a resposta. O código está certo, fazendo o que deveria fazer.

#5 rodrigo.rrch

rodrigo.rrch

    Novato no fórum

  • Usuários
  • 4 posts
  • Sexo:Masculino
  • Localidade:Araras - SP

Posted 14/12/2011, 12:51

Perdão LeoB

li correndo e entendi realmente errado

Acontece que o contato.php é processado primeiro que o captcha.php. Primeiro o cliente recebe o HTML que o contato gera. Depois é que o navegador vai acessar o captcha pra gerar o código e baixar a imagem. Assim, o contato fica mesmo sempre atrasado, como você está vendo. Não se esqueça que o PHP não entende HTML. O HTML que você escreve o PHP manda direto pro navegador sem se importar. Quem vai entender o <img> e baixar a imagem é o cliente.


Vamos la.. só para ter certeza rsrs

1- Eu entendi que o contato.php é processado primeiro por isso as Session aparecem diferente
2- Eu entendi que o html é mostrado primeiro do que o php

Eu queria que o contato não ficasse atrasado.. que o mesmo session gerada no captcha e apresentada pela <img> aparecesse como valor em um <input>

#6 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 14/12/2011, 13:03

Não tem essa de o HTML é mostrado primeiro que o PHP. A pessoa acessa o contato.php, o servidor processa esse arquivo e envia o HTML resultante pro navegador. O navegador processa esse HTML e vê que tem um <img>. Daí acessa o captcha.php, que é a url do img, e baixa a imagem. Durante esse segundo acesso é que o código é gerado. Eu recomendo manter como está, mas se quer mesmo mudar, pega as linhas do captcha que geram o código e coloca no contato, fazendo os ajustes necessários.




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq