Mar 10 2008

Evitando múltiplos posts com session

Category: PHPvbmendes @ 17:52

Muitos desenvolvedores já se depararam com a situação de que usuários impacientes enviam formulários dezenas de vezes, e isso realmente incomoda, pois aparecem vários registros idênticos.

Uma forma de solucionar tal problema seria usando session. No momento do envio, salva algo que identifique(que chamarei de identidade) o formulário na SESSION, e sempre que for enviar algo, verifica se a identidade da session bate com a do fomulário enviado, se bater, o sistema impede que o formulário seja enviado novamente.

No caso de formulários de e-mail, eu particularmente uso como identidade a mensagem do e-mail criptografada por md5, visto que reduz significativamente o tamanho do que será guardado na session.

Bom, vamos aos códigos:

session_start();
$md5Mensagem = md5($_POST['mensagem']);
if(isset($_SESSION['md5Mensagem'] && $md5Mensagem == $_SESSION['md5Mensagem']){
echo 'Esta mensagem já foi enviada';
} else {
if(ENVIA_MENSAGEM){
$_SESSION['md5Mensagem'] = $md5Mensagem;
echo 'Mensagem enviada com sucesso';
} else echo 'Mensagem não foi enviada';
}

O código acima está bem simplificado, eu encapsulei o processo de enviar a mensagem (função mail, gravar no banco, ou qualquer outro método) por fugir do escopo deste post.

O código verifica se existe algum md5Mensagem na session, e se ele é igual ao md5 da mensagem enviada, se sim, ele informa que a mensagem já foi enviada, se não, o sistema tenta fazer o envio, se der certo ele salva o md5 na session, se não, ele apenas informa que não deu certo.

Bom, é isso, qualquer dúvida, postem comentários que responderemos.

Tags: ,

3 Responses to “Evitando múltiplos posts com session”

  1. Paulo says:

    Bem interessante.

  2. Fernando says:

    E ae Fabio! massa seu blog, ja coloquei o link no meu.

  3. Fernando says:

    E ae Fabio, massa seu blog.. ja linkei pro meu

Leave a Reply