Controle do browser

11 respostas
L

Oi Pessoal,

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!

Abraço,

11 Respostas

FeniX

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.

Use cookies ou sessions para guardar o status atual do usuário

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

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.

[]s
Luca

J

Você quer uma alternativa paliativa grotesca?

Coloque isso no início de sua página JSP:

<% response.setHeader("Cache-Control","no-cache"); //HTTP 1.1 response.setHeader("Pragma","no-cache"); //HTTP 1.0 response.setDateHeader ("Expires", 0); //prevents caching response.setHeader("Cache-Control","no-store"); //HTTP 1.1 %>

Isso fará com que o ao voltar pelo BACK do browser será exibida a mensagem de página expirada e daí babau…já era…

L

julianostr:
Você quer uma alternativa paliativa grotesca?

Coloque isso no início de sua página JSP:

<% response.setHeader("Cache-Control","no-cache"); //HTTP 1.1 response.setHeader("Pragma","no-cache"); //HTTP 1.0 response.setDateHeader ("Expires", 0); //prevents caching response.setHeader("Cache-Control","no-store"); //HTTP 1.1 %>

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)

Obrigado pela dica!

C

julianostr:
Você quer uma alternativa paliativa grotesca?

Coloque isso no início de sua página JSP:

<% response.setHeader("Cache-Control","no-cache"); //HTTP 1.1 response.setHeader("Pragma","no-cache"); //HTTP 1.0 response.setDateHeader ("Expires", 0); //prevents caching response.setHeader("Cache-Control","no-store"); //HTTP 1.1 %>

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

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

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! :smiley: rs…

Sei que não ficou muito elegante mas pelo menos impedi que ele enganasse o jogo! :wink:

Criado 12 de julho de 2006
Ultima resposta 14 de jul. de 2006
Respostas 11
Participantes 6