Kembali ke halaman sebelumnya dengan header (“Location:”); di PHP

124

Judul pertanyaan ini menjelaskan pertanyaan saya. Bagaimana cara mengarahkan pengunjung halaman PHP kembali ke halaman sebelumnya denganheader( "Location: URL of previous page" );

Desainer web
sumber
header ('Lokasi:'. $ _SERVER ['HTTP_REFERER']);
raskul
Menurut sumber w3schools.com/php/php_superglobals_server.asp ini , ini tidak dapat diandalkan karena tidak semua vendor mendukungnya
mohadennis

Jawaban:

246

mencoba:

header('Location: ' . $_SERVER['HTTP_REFERER']);

Perhatikan bahwa ini mungkin tidak bekerja dengan halaman aman (HTTPS) dan itu ide yang sangat buruk secara keseluruhan karena header dapat dibajak, mengirim pengguna ke beberapa tujuan lain. Header bahkan mungkin tidak dikirim oleh browser.

Idealnya, Anda ingin:

  • Tambahkan alamat pengirim ke permintaan sebagai variabel kueri (mis.? Back = / list)
  • Tentukan halaman pengembalian dalam kode Anda (mis. Semua pengiriman formulir yang berhasil dialihkan ke halaman daftar)
  • Beri pengguna opsi ke mana mereka ingin pergi berikutnya (mis. Simpan dan lanjutkan mengedit atau hanya Simpan)
Dimitry
sumber
19
Hal-hal aneh telah terjadi :)
Dimitry
3
@ Col sehingga Anda dapat membuktikan masalah praktis dengan ini?
Pekka
1
Menggunakan perujuk, setelah sebelumnya menguji apakah sudah disetel dan valid, dalam konteks halaman ke halaman yang ditentukan bisa menjadi praktik yang dapat diterima dengan sempurna - sebagian besar browser mengirimkan HTTP_REFERER yang tepat.
Pekka
1
@Col Saya telah menggunakan ini dalam produksi ketika saya harus menyelesaikan sesuatu untuk demo. Seperti yang Anda lihat dari jawaban saya, saya memberikan tiga solusi lain yang akan saya gunakan alih-alih pengalihan berdasarkan HTTP_REFERER.
Dimitry
2
@Madmartigan kedengarannya seperti perilaku yang sangat aneh, satu-satunya petunjuk yang bisa saya lihat di 'net yang menyebabkannya adalah beberapa masalah pengalihan. Bagaimanapun, saya setuju bahwa menggunakan referer bukanlah cara jika Anda membutuhkan keamanan 100%
Pekka
22

Sangat sederhana, gunakan saja ini

header("location:javascript://history.go(-1)");

Ini bekerja dengan baik untuk saya

Hammad
sumber
2
Ini terdengar sangat pintar, tetapi di FF10 saya mengerti "Corrupted Content Error The page you are trying to view cannot be shown because an error in the data transmission was detected."Jadi ini pada dasarnya tidak dapat digunakan.
Wesley Murch
Wesley Murch, Ini berfungsi dengan baik untuk saya di hampir setiap browser utama termasuk yang Anda sebutkan. Ini hanya berfungsi untuk Anda hanya jika Anda datang ke halaman yang memiliki sesuatu dalam sejarah.
Hammad
5
Ini dapat menyebabkan halaman sebelumnya disajikan dari cache browser.
aksu
14

Anda harus menyimpan lokasi itu entah bagaimana caranya.

Katakanlah itu adalah formulir POST, cukup letakkan lokasi saat ini di bidang tersembunyi lalu gunakan di header()Lokasi.

Akal Sehat Anda
sumber
14

Hanya sedikit tambahan: Saya percaya itu adalah hal yang umum dan diketahui untuk ditambahkan exit;setelah fungsi tajuk jika kita tidak ingin sisa kode memuat atau mengeksekusi ...

header('Location: ' . $_SERVER['HTTP_REFERER']);
exit;
6opko
sumber
Itu hanya "" untukku.
Alexander Guo
2

Coba saja ini di Javascript:

 $previous = "javascript:history.go(-1)";

Atau Anda bisa mencobanya di PHP:

if(isset($_SERVER['HTTP_REFERER'])) {
    $previous = $_SERVER['HTTP_REFERER'];
}
Minu Alex
sumber
1

Menyimpan url sebelumnya dalam variabel sesi itu buruk, karena pengguna mungkin mengklik kanan pada beberapa halaman lalu kembali dan menyimpan.

kecuali Anda menyimpan url sebelumnya dalam variabel sesi ke bidang tersembunyi dalam formulir dan setelah menyimpan header ("Lokasi: simpan URL halaman panggilan");

Rudy
sumber
mengapa kita tidak bisa menggunakan $ _SERVER ['http_referrer'] saja?
Vignesh