$ _SERVER ['HTTP_REFERER'] Alınlıklı çalışmıyor

2 Cevap

Bazı sayfalara kamu erişim sağlar, ama diğerleri için bir giriş gerektirir bir site var. Ben tüm sayfalarından oturum için bir bağlantı var, ve ne başarılı bir giriş yaptıktan sonra yapmak istiyorum geri onlar giriş linki tıklandığında vardı sayfaya kullanıcıyı göndermek. Ben HTTP_REFERER sahte olabilir biliyorum ve bazen bazı ana ve vekilleri tarafından dışarı çıkardı, ama kesinlikle kendi sitem içinde bulunuyor ve kullanıcılar için yalnızca bir kolaylık beri, ben bu konuda çok endişeli değilim.

Ben olsa, bir yönlendirme ile birlikte çalışmıyor neden merak ediyorum. Ben http referer değerini içeren bir görünür alanını ettik ve doğru görüntüler. Yani sayfa yönlendirme değişkenin değerini oluyor. Ama bu çalıştığınızda:

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

çalışmıyor. Bu, diğer taraftan, yapar:

$home_url = 'http://' . $_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/discussions.php';
header('Location: ' . $home_url);

Yani başlık yer parçası çalıştığını biliyorum. Bu http_referer değişken ile birlikte çalışmak istemiyor Herhangi bir fikir neden?

(Ayrıca, referer yanlış yazıldığından başkasının fındık sürücü nedir? Ben OED yazım, aptal beni kullanarak mistyping devam ...)

2 Cevap

(Eğer bir tanımlama depolanan kimlik bilgilerini veya HTTP temel / auth sindirmek kullandığınız sürece) giriş doğrulama sayfasında, referer sayfasını değil, özgün bir giriş olacaktır.

Kullanıcı bilgilerini girer giriş sayfası isteği referer ile gizli bir alan var, ve sonra giriş doğrular komut onu geçmek ve giriş ise yönlendirme yapar nerede ne yapabilirim, giriş sayfasında, bir başarılı.

Daha da iyisi: kullanıcı (çoğu tarayıcılarda yapılandırılabilir) referer göndermek olmayabilir beri, giriş sayfasına bağlantı var sorgu dizesinde orijinal sayfayı içermektedir. Sonra yukarıdaki gibi devam, ama yerine referer bu değeri kullanın.

Temiz olması için:

<form method="post" action="login">
...
<input name="user" type="text" />
<input name="password" type="password" />
<input name="referer" type="hidden" value="<?php echo urlencode($_SERVER['HTTP_REFERER']) ?>" />
</form>

o zaman

<?php
if (login_is_successful() && !empty($_POST['referer']) && !is_array($_POST['referer'])) {
    header("Location: ".urldecode($_POST['referer']));
    die();
}

İlk örnekte $_SERVER['HTTP_REFERER'] değeri nedir? Doğru ayarlanmış mı?

Sen sadece adres çubuğuna URL yazarsanız, tarayıcıların çoğu referer dize göndermek olmaz, biliyorum.