Powrót do poprzedniej strony z nagłówkiem („Lokalizacja:”); w PHP
124
Tytuł tego pytania w pewnym sensie wyjaśnia moje pytanie. Jak przekierować odwiedzającego stronę PHP z powrotem do poprzedniej strony z rozszerzeniemheader( "Location: URL of previous page" );
Pamiętaj, że może to nie działać w przypadku bezpiecznych stron (HTTPS) i ogólnie jest to dość zły pomysł, ponieważ nagłówek może zostać przejęty, wysyłając użytkownika do innego miejsca docelowego. Przeglądarka może nawet nie wysłać nagłówka.
Idealnie byłoby, gdybyś:
Dołącz adres zwrotny do żądania jako zmienną zapytania (np.? Back = / list)
Zdefiniuj stronę zwrotną w swoim kodzie (tj. Wszystkie pomyślnie przesłane formularze przekierowują do strony z listą)
Zapewnij użytkownikowi opcję, gdzie chce przejść dalej (np. Zapisz i kontynuuj edycję lub po prostu Zapisz)
@Col, więc możesz udowodnić praktyczny problem z tym?
Pekka,
1
Korzystanie z elementu odsyłającego, po uprzednim sprawdzeniu, czy jest on ustawiony i prawidłowy, w zdefiniowanym kontekście między stronami może być całkowicie akceptowalną praktyką - większość przeglądarek wysyła odpowiedni HTTP_REFERER.
Pekka
1
@Col Użyłem tego w produkcji, kiedy musiałem zrobić coś dla wersji demonstracyjnej. Jak widać z mojej odpowiedzi, podaję trzy inne rozwiązania, do których bym się zwrócił zamiast przekierowania opartego na HTTP_REFERER.
Dimitry
2
@Madmartigan, które brzmi jak naprawdę dziwne zachowanie, jedyną wskazówką, jaką widzę w sieci, powodującą problemy, są problemy z przekierowaniem. W każdym razie zgadzam się, że korzystanie z recenzenta nie jest drogą, jeśli potrzebujesz 100% bezpieczeństwa
Brzmiało to naprawdę sprytnie, ale w FF10 dostaję, "Corrupted Content Error The page you are trying to view cannot be shown because an error in the data transmission was detected."więc jest to w zasadzie bezużyteczne.
Wesley Murch
Wesley Murch, U mnie działa dobrze w prawie każdej większej przeglądarce, w tym tej, o której wspomniałeś. Działa tylko na wypadek, gdybyś wszedł na stronę, mając coś w historii.
Hammad
5
Może to spowodować, że poprzednia strona będzie obsługiwana z pamięci podręcznej przeglądarki.
aksu
14
Musisz jakoś zapisać tę lokalizację.
Powiedz, że jest to formularz POST, po prostu umieść bieżącą lokalizację w ukrytym polu, a następnie użyj jej w header()lokalizacji.
Tylko mały dodatek: uważam, że jest to powszechna i znana rzecz, którą dodaje się exit;po funkcji nagłówka na wypadek, gdybyśmy nie chcieli, aby reszta kodu była ładowana lub wykonywana ...
Przechowywanie poprzedniego adresu URL w zmiennej sesji jest złe, ponieważ użytkownik może kliknąć prawym przyciskiem myszy wiele stron, a następnie wrócić i zapisać.
chyba że zapiszesz poprzedni adres url w zmiennej sesji do ukrytego pola w formularzu i po zapisaniu nagłówka („Lokalizacja: zapisz URL strony wywołującej”);
Odpowiedzi:
próbować:
Pamiętaj, że może to nie działać w przypadku bezpiecznych stron (HTTPS) i ogólnie jest to dość zły pomysł, ponieważ nagłówek może zostać przejęty, wysyłając użytkownika do innego miejsca docelowego. Przeglądarka może nawet nie wysłać nagłówka.
Idealnie byłoby, gdybyś:
źródło
To takie proste, po prostu użyj tego
Dla mnie działa dobrze
źródło
"Corrupted Content Error The page you are trying to view cannot be shown because an error in the data transmission was detected."
więc jest to w zasadzie bezużyteczne.Musisz jakoś zapisać tę lokalizację.
Powiedz, że jest to formularz POST, po prostu umieść bieżącą lokalizację w ukrytym polu, a następnie użyj jej w
header()
lokalizacji.źródło
Tylko mały dodatek: uważam, że jest to powszechna i znana rzecz, którą dodaje się
exit;
po funkcji nagłówka na wypadek, gdybyśmy nie chcieli, aby reszta kodu była ładowana lub wykonywana ...źródło
Przechowywanie poprzedniego adresu URL w zmiennej sesji jest złe, ponieważ użytkownik może kliknąć prawym przyciskiem myszy wiele stron, a następnie wrócić i zapisać.
chyba że zapiszesz poprzedni adres url w zmiennej sesji do ukrytego pola w formularzu i po zapisaniu nagłówka („Lokalizacja: zapisz URL strony wywołującej”);
źródło
Po prostu spróbuj tego w Javascript:
Lub możesz spróbować w PHP:
źródło