Başlıklı bir önceki sayfaya dön ("Konum:"); PHP'de


Yanıtlar:


246

Deneyin:

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

Bunun güvenli sayfalarda (HTTPS) çalışmayabileceğini ve başlık ele geçirilerek kullanıcıyı başka bir hedefe gönderebileceği için genel olarak oldukça kötü bir fikir olduğunu unutmayın. Başlık, tarayıcı tarafından bile gönderilmeyebilir.

İdeal olarak şunlardan birini yapmak isteyeceksiniz:

  • İade adresini isteğe bir sorgu değişkeni olarak ekleyin (ör.? Geri = / list)
  • Kodunuzda bir dönüş sayfası tanımlayın (yani tüm başarılı form gönderimleri liste sayfasına yönlendirir)
  • Kullanıcıya daha sonra nereye gitmek istediği seçeneği sunun (ör. Kaydedin ve düzenlemeye devam edin veya yalnızca Kaydet)

19
Daha garip şeyler oldu :)
Dimitry

3
@Col, böylece bununla pratik bir problemi kanıtlayabilirsin?
Pekka

1
Yönlendiriciyi kullanmak, ayarlanmış ve geçerli olup olmadığını önceden test ettikten sonra, tanımlanmış bir sayfadan sayfaya bağlamda mükemmel bir şekilde kabul edilebilir bir uygulama olabilir - tarayıcıların büyük çoğunluğu birlikte uygun bir HTTP_REFERER gönderir.
Pekka

1
@Col Bunu bir demo için bir şeyler yapmam gerektiğinde prodüksiyonda kullanıyorum. Cevabımdan da görebileceğiniz gibi, HTTP_REFERER'a dayalı yeniden yönlendirme yerine başvuracağım üç başka çözüm sunuyorum.
Dimitry

2
@Madmartigan, kulağa gerçekten garip bir davranış gibi geliyor, ağda görebildiğim tek ipucu, buna neden olan bazı yeniden yönlendirme sorunları. Her neyse,% 100 güvenliğe ihtiyacınız varsa yönlendireni kullanmanın bir yol olmadığını kabul ediyorum
Pekka

22

Çok basit sadece bunu kullan

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

Benim için iyi çalışıyor


2
Bu kulağa çok akıllıca geldi, ancak FF10'da elde ediyorum "Corrupted Content Error The page you are trying to view cannot be shown because an error in the data transmission was detected."Yani bu temelde kullanılamaz.
Wesley Murch

Wesley Murch, Bahsettiğiniz tarayıcı dahil hemen hemen her büyük tarayıcıda benim için iyi çalışıyor. Sadece tarihte bir şey olan sayfaya gelmeniz durumunda sizin için çalışır.
Hammad

5
Bu, önceki sayfanın tarayıcı önbelleğinden sunulmasına neden olabilir.
aksu

14

O yeri bir şekilde kaydetmelisiniz.

Bunun bir POST formu olduğunu söyleyin, mevcut konumu gizli bir alana koyun ve ardından Konumda kullanın header().


14

Sadece küçük bir ekleme: exit;Kodun geri kalanının yüklenmesini veya yürütülmesini istemiyorsak diye başlık işlevinden sonra eklemenin yaygın ve bilinen bir şey olduğuna inanıyorum ...

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

Benim için sadece "".
Alexander Guo

2

Bunu Javascript ile deneyin:

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

Ya da PHP'de deneyebilirsiniz:

if(isset($_SERVER['HTTP_REFERER'])) {
    $previous = $_SERVER['HTTP_REFERER'];
}

1

Önceki URL'yi bir oturum değişkeninde saklamak kötüdür, çünkü kullanıcı birden çok sayfaya sağ tıklayıp sonra geri gelip kaydedebilir.

oturum değişkenindeki önceki url'yi formdaki gizli bir alana kaydetmezseniz ve başlığı kaydettikten sonra ("Konum: arayan sayfanın URL'sini kaydet");


neden sadece $ _SERVER ['http_referrer'] kullanamıyoruz?
Vignesh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.