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


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)

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


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.


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;

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'];
}

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");


mengapa kita tidak bisa menggunakan $ _SERVER ['http_referrer'] saja?
Vignesh
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.