Como faço para que o meu usuário não volte para a pagina anterior pelos botões do browser e somente por links ou botões que estão na própria página.
Cara, você pode fazer não aparecer quaisquer botões que aparecem no browser via javascript. porém:
1 - Necessariamente vai ter que ser criada uma nova janela;
2 - É altamente contornável se a pessoa clicar na página com o botão direito do mouse e selecionar “voltar”
Me diga uma coisa, porque a pessoa não pode voltar para a página anterior? Não existe uma outra solução? Explique mais do seu problema.
Isso é assunto pra muitas gerações…
Vira e mexe essa pergunta aparece…
Aconselho você a abrir o browser “pelado”, ou seja, sem menu, botões e campo da URL. Utilize o comando window.open("","","") do javascript.
Falta ainda interceptar o clique do botão direito do mouse pra evitar que usuários mais espertinhos usem o a opção voltar/avançar.
Outra solução seria fazer com que depois que a página é carregada você faz com que não tenha mais nada no cache via comando HTML e no .JSP:
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
<%
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
%>
Ao clicar no botão voltar aparecerá uma página default dizendo que a ela precisa ser recarregada.
Outro detalhe, a tecla Backspace tem o mesmo efeito do botão voltar quando o foco do cursor é a página.
Assim como o terceiro ou quarto botão de alguns mouses também têm o efeito de voltar/avançar.
Gente, não adianta, a pessoa sempre vai dar um jeito de voltar, de uma forma ou de outra.
O jeito é saber para que não pode voltar, daí podemos solucionar de uma outra forma.
bem estou desenvolvendo um sistema de pesquisa bem no estilo daqueles censo, em que aparece uma pergunta em cada página são cerca de 130 perguntas. o problema é que cada vez que a pessoa vai responder uma pergunta eu guardo a instrução SQL para ser executada somente no final. Porém se a pessoa voltar para a página e responder novamente a pergunta vai ter um comando SQL duplicado então a pessoa pode responder a pergunta mais de uma vez zoando todo o banco tendo dados duplicados.
Então o objetivo é evitar que a página anterior seja carregada novamente para que o usuario possa responder de novo a pergunta
Vou ver se o esquema de limpar o cache da página funcione
Hummm, mas daí no seu caso é só lógica. Guarde na sessão um indicador de pergunta já respondida e ao invés de gerar uma nova resposta pra mesma pergunta você atualiza ela.
[quote=julianostr]Hummm, mas daí no seu caso é só lógica. Guarde na sessão um indicador de pergunta já respondida e ao invés de gerar uma nova resposta pra mesma pergunta você atualiza ela.
[/quote]
Essa fica inviavel por dois motivos:
1 coloco todas as instruções em um batch ew mando executar de uma vez só, posso sobrecarregar o batch com as atualizações
2 tenho um dia pra fazer isso começando de ontem ou seja já não tenho mais nada
tentei usar o processo de limpar o cache mas não consegui nada, se alguém tem alguma outra maneira pode falar sou todo ouvido, pode-se qualquer coisa gambeta, gambiarra qualquer padrões McGyver só tem tem que bloquear voltar
coloca um um javascript tipo:
history.forward();
em todas as paginas.
quando vc acessa a primeira vez a pagina, não tem historico, e o js vai ser ignorado. quando vc clica no back ele volta p/ pagina anterior mas o js vai fazer ele navegar de volta.
sacou?
da uma pesquisada no forum que ja foi postado isso aqui.
[]'s
[quote=jgbt]coloca um um javascript tipo:
history.forward();
em todas as paginas.
quando vc acessa a primeira vez a pagina, não tem historico, e o js vai ser ignorado. quando vc clica no back ele volta p/ pagina anterior mas o js vai fazer ele navegar de volta.
sacou?
da uma pesquisada no forum que ja foi postado isso aqui.
[]'s
[/quote]Legal, mas acho que para ele não vai funcionar, porque toda vez que volta ele “injeta” SQL no comando. E vai voltar e ser obrigado a avançar, logo vai duplicar o SQL.
Eu já fiz uma solução para isso, mas é um saco e era em ASP. Imagina o seguinte: uma sessão com XML que armazenaria todas as respostas. No fim, você lê todas as respostas, inserindo ou atualizando no banco de dados.
Se o infeliz voltar ou avançar, não tem problema, porque você não duplica o XML, somente altera o valor daquela resposta.
Tomara que você tenha tempo de resolver o seu problema. Eu juro que se tivesse um pouquinho mais de tempo te ajudava a resolver isso.
[quote=balarini]Legal, mas acho que para ele não vai funcionar, porque toda vez que volta ele “injeta” SQL no comando. E vai voltar e ser obrigado a avançar, logo vai duplicar o SQL.
[/quote]
acho que não, pq o foward não submete a pagina. e provavelmente o sql seja injetado no servidor, certo?
[]'s
[quote=jgbt]coloca um um javascript tipo:
history.forward();
em todas as paginas.
quando vc acessa a primeira vez a pagina, não tem historico, e o js vai ser ignorado. quando vc clica no back ele volta p/ pagina anterior mas o js vai fazer ele navegar de volta.
sacou?
da uma pesquisada no forum que ja foi postado isso aqui.
[]'s
[/quote]
Perfect, técnica totalmente eficiente ou eficaz não sei qual dos dois. Perfeito para o meu problema vlw. :lol:
Vou falar como está o esquema do sistema tenho as página com a pergunta, o usuário responde e submete para uma outra página nessa página eu só crio a instrução SQL e adciono no Batch já logo direciono para a pegunta seguinte, fiz os teste e funcionou eu tento voltar continuo na mesma página, já a parte da instrução SQL não sei se vai funcionar mas acho que o
history.forward();
Avança uma página do historico e não faz requisição, ele busca o HTML que é devolvido do servidor para o cliente então nem passa pela página que cria o SQL amanhã de manhã vou ver e posto o que conteceu
faz em Flash…
VC tá louco fazer em flash. O sistema era pra ontem testei e todo ele com, o JavaScript ele rodou bonitinho e nã o dpulicou nenhuma instrução SQL isso é muito bom.
Eu também estou pssando por esse problema, só que é num formulário de cadastro que guarda num XML.
cadastro os dados só que quando clico no voltar as informações que digitei ainda estão todas la.
já tentei usar os controles de cache, só que ou eu fiz errado ou não está dando certo mesmo.
Simplesmente não é possível controlar o que o navegador faz. Não dá, desistam. Pop-ups sem barra de navegação, javascript… só adiam problemas.
Que tal ir à raiz do problema? Se o botão voltar “estraga” alguma coisa, é porque a camada de visualização mantém um estado, e o navegador, ao mudar de página sem fazer nenhuma requisição, causa a perda da sincronização com o servidor. Esse é um problema muito comum, dadas as características do protocolo HTTP.
Solução? É preciso uma validação de dados mais ‘restritiva’ no lado servidor… evitará inconsistências, porém, claro, não evitará que os usuários façam bobagem (sim, interface web tem desvantagens também).
Não esquecendo de mencionar… escrever a interface usando Swing e Java Web Start é uma forma muito mais simples de tratar esse tipo de situação.
o que vc pode fazer é um js para limpar todos os campos.
[quote=tengan]bem estou desenvolvendo um sistema de pesquisa bem no estilo daqueles censo, em que aparece uma pergunta em cada página são cerca de 130 perguntas. o problema é que cada vez que a pessoa vai responder uma pergunta eu guardo a instrução SQL para ser executada somente no final. Porém se a pessoa voltar para a página e responder novamente a pergunta vai ter um comando SQL duplicado então a pessoa pode responder a pergunta mais de uma vez zoando todo o banco tendo dados duplicados.
Então o objetivo é evitar que a página anterior seja carregada novamente para que o usuario possa responder de novo a pergunta
Vou ver se o esquema de limpar o cache da página funcione[/quote]Hashtable resolve isto ai.
[quote=jgbt]coloca um um javascript tipo:
history.forward();
em todas as paginas.
quando vc acessa a primeira vez a pagina, não tem historico, e o js vai ser ignorado. quando vc clica no back ele volta p/ pagina anterior mas o js vai fazer ele navegar de volta.
sacou?
da uma pesquisada no forum que ja foi postado isso aqui.
[]'s
[/quote]
kra Funfo de boa !!! \o/