Voltar à página anterior com cabeçalho (“Localização:”); em PHP
124
O título dessa pergunta meio que explica minha pergunta. Como redireciono o visitante da página PHP de volta à sua página anterior com oheader( "Location: URL of previous page" );
Observe que isso pode não funcionar com páginas seguras (HTTPS) e é uma péssima ideia geral, pois o cabeçalho pode ser invadido, enviando o usuário para outro destino. O cabeçalho pode nem ser enviado pelo navegador.
Idealmente, você desejará:
Anexe o endereço de retorno à solicitação como uma variável de consulta (por exemplo,? Back = / list)
Defina uma página de retorno no seu código (por exemplo, todos os envios de formulário bem-sucedidos são redirecionados para a página de listagem)
Forneça ao usuário a opção de onde ele deseja ir (por exemplo, salve e continue editando ou apenas Salvar)
@ Col para que você possa provar um problema prático com isso?
Pekka
1
Usar o referenciador, após testar previamente se ele está definido e válido, em um contexto definido de página a página pode ser uma prática perfeitamente aceitável - a grande maioria dos navegadores envia um HTTP_REFERER adequado.
Pekka
1
@ Col Eu usei isso na produção quando tive que fazer algo para uma demonstração. Como você pode ver na minha resposta, forneço três outras soluções para as quais eu me voltaria, em vez do redirecionamento baseado em HTTP_REFERER.
Dimitry
2
@ Madmartigan que parece um comportamento realmente estranho, a única dica que posso ver na net causando alguns problemas de redirecionamento. De qualquer forma, eu concordo que usando o referer não é o caminho, se você precisa de 100% de segurança
Isso soou muito inteligente, mas no FF10 eu entendo. "Corrupted Content Error The page you are trying to view cannot be shown because an error in the data transmission was detected."Isso é basicamente inutilizável.
23412 Wesley Murch
Wesley Murch, Está funcionando bem para mim em quase todos os principais navegadores, incluindo o que você mencionou. Só funciona para você, caso você tenha chegado à página com algo na história.
Hammad
5
Isso pode fazer com que a página anterior seja veiculada no cache do navegador.
aksu
14
Você precisa salvar esse local de alguma forma.
Digamos que seja um formulário POST, basta colocar o local atual em um campo oculto e usá-lo no header()Local.
Apenas uma pequena adição: acredito que é uma coisa comum e conhecida adicionar exit;após a função de cabeçalho, caso não desejemos que o restante do código seja carregado ou executado ...
Armazenar o URL anterior em uma variável de sessão é ruim, porque o usuário pode clicar com o botão direito do mouse em várias páginas e depois voltar e salvar.
a menos que você salve o URL anterior na variável da sessão em um campo oculto no formulário e após salvar o cabeçalho ("Localização: salvar URL da página de chamada");
Respostas:
experimentar:
Observe que isso pode não funcionar com páginas seguras (HTTPS) e é uma péssima ideia geral, pois o cabeçalho pode ser invadido, enviando o usuário para outro destino. O cabeçalho pode nem ser enviado pelo navegador.
Idealmente, você desejará:
fonte
É tão simples, basta usar isso
Está funcionando bem para mim
fonte
"Corrupted Content Error The page you are trying to view cannot be shown because an error in the data transmission was detected."
Isso é basicamente inutilizável.Você precisa salvar esse local de alguma forma.
Digamos que seja um formulário POST, basta colocar o local atual em um campo oculto e usá-lo no
header()
Local.fonte
Apenas uma pequena adição: acredito que é uma coisa comum e conhecida adicionar
exit;
após a função de cabeçalho, caso não desejemos que o restante do código seja carregado ou executado ...fonte
Apenas tente isso em Javascript:
Ou você pode experimentá-lo em PHP:
fonte
Armazenar o URL anterior em uma variável de sessão é ruim, porque o usuário pode clicar com o botão direito do mouse em várias páginas e depois voltar e salvar.
a menos que você salve o URL anterior na variável da sessão em um campo oculto no formulário e após salvar o cabeçalho ("Localização: salvar URL da página de chamada");
fonte