Estou com um problema e queria saber se existe alguma solução possível para isso.
O caso é o seguinte, estou desenvolvendo um quiz em que cada pergunta fica em uma JSP diferente, ou seja o usuário vai respondendo por etapas, se acertar a primeira vai para a segunda e assim por diante.
Se ele erra é remetido para uma página avisando que ele errou a pergunta e o jogo acabou.
O problema é que se nessa página ele clicar o botão back do browser vai voltar para a pergunta do quiz e ele pode responder novamente, ou seja, ele pode trapacear e ir tentando até acertar!
O que eu queria era uma função (pode ser até em javascript se alguém souber) que fizesse o controle disso, que ficasse “vigiando” e caso o usuário clicar no back ele seria remetido para uma página avisando q ele perdeu o jogo por tentar trapacear…
Não sei se consegui ser muito claro com meu problema… mas se salguém tiver uma luz fico muitoooooo grato!
Use cookies ou sessions para guardar o status atual do usuário
leosouzabh
minha solução teoria,
Crie uma variavel no escopo da sessão para cada página, assim que o usuario clicar no botão responder (ou um link) você altera o valor desta variavel. Sempre que a página for carregada você verifica o valor desta variavel, se ela estiver diferente você exibe um alerta ou nao deixa o usuario submeter novamente a requisição.
Não acho que cookies seja uma boa ideia pois ja tive alguns problemas com isso. Outras aplicações podem limpar os cookies do Browser…ai seu codigo fica furado…
mais acho que o session funcionara corretamente!!
L
leo182
pois é, eu já fiz com session mas não deu certo pelo seguinte motivo: quando vc aperta o back essa página que aparece quando volta não é re-lida, ou seja, o código dela não é interpretado! Ela é carregada do cache do browser então não tem como testar uma variavel da session pq a página nem vai “rodar” esse comando de teste… :?
Luca
Olá
É bom rever seus conceitos de session pois session pode usar Cookies. A diferença é que com session, se o cliente por ignorância ou má informação bloquear os cookies, session reescreve a URL (que é uma solução pior do que cookies, mas que serve como gambiarra)
[]s
Luca
leosouzabh
Luca, não endendi bem o que você quiz dizer?? Esta solução funcioná ou não??
Luca
Olá
Leosouza, sua solução funciona. Sobre o problema do cache do outro leo ele pode estudar o protocolo HTTP e googlar sobre cache que achará muita coisa. Eu mesmo já escrevi um texto enorme sobre isto em mensagem aqui no fórum do GUJ.
Mas eu quiz chamar a atenção de todos que impedir cookies não é bom e que a vantagem de sessions é que com sessions automaticamente é feito um procedimento alternativo caso o usuário lá do outro lado por ignorância bloqueie os cookies. Mas o procedimento padrão das sessions é usar cookies.
Isso fará com que o ao voltar pelo BACK do browser será exibida a mensagem de página expirada e daí babau…já era…
Valeu Juliano!
Essa foi a melhor solução que encontrei até agora… vou deixar assim por enquanto!
Toda a minha luta está sendo contra a cache… e isso fez com q ela fosse ignorada!
Eu tb havia pensando em colocar o Quiz em uma janela pop sem os botões back e foward, e bloquear o clique do botão direto do mouse… mas o usuário ainda poderia usar o backspace do teclado… e não encontrei nenhuma função do tipo “onkeypress(código do backspace)” para colocar… então vou usando isto que me falou mesmo! 8)
Isso fará com que o ao voltar pelo BACK do browser será exibida a mensagem de página expirada e daí babau…já era…
Acho que isso não resolve o problema como um todo.
Se não me engano, o comportamento disso no IE é mostrar uma mensagem de “Página Expirada”, mas no Firefox por exemplo, acontece algo assim: “A página expirou, você gostaria de submeter as informações novamente?”
Aí o usuário submete de novo as informações e retorna a pagina anterior pra ele.
Se quiser ter realmente segurança nesse tipo de coisa, a única solução que eu imaginei for usar controle com variáveis na sessão do usuário conforme já foi falado.
Se for um sistema que o usuário precise estar logado, talvez fosse interessante até gravar essa informação no banco.
Bom, mas toda essa parafernalha vai depender do nível de “segurança” que o seu sistema deve ter.
[]'s
J
julianostr
Por isso eu escrevi, já preparando o espírito do colega:
“Você quer uma alternativa paliativa grotesca?”
Agora, a solução ideal para isso eu não sei não.
L
leo182
Pessoal,
Resolvi o problema da seguinte forma:
1- Limpei a cache como o Juliano falou e assim retonava “Essa página expirou”;
2- Conforme o Chico Bento falou, realmente se o usuário desse um atualizar não adiantaria nada… mas… como o reload executa o script da página novamente, eu coloquei uma verificação pela data do dia, então quando o usuário clica reload, o script é executado e coloquei um response.sendRedirect para uma página chamada “trapaca.jsp” com uma mensagem bem humorada avisando que o usuário não pode usar o back no jogo! rs…
Sei que não ficou muito elegante mas pelo menos impedi que ele enganasse o jogo!