PHP HTTP_REFERRER - nasıl son sayfa algılamak için?

4 Cevap php

Ben kullanıcı sadece tıklandığında nerede algılamak gerekir - benim AJAX içeriğin sokulacak olan kaynak sayfa bağlı olarak farklı görüntülenen gereken gibi.

Bu sadece verilerin olması gerekiyor about.php gitmek, ama yaklaşık main.php gitmek için eğer bu bütün orta sütun olması gerekir eğer öyleyse veri etrafında bir başlık / altbilgi sarıcı gerekiyor.

AJAX denilen html kimin sorduğunu görmek için bu kodu kullanan ve daha sonra uygun bir HTML yanıt biçimlendiren bir php sayfasında tutulur.

$array[] = "/cf/about.php";
$array[] = "/cf/about/about-main.php";
$array[] = "/cf/about/other-page.php";


$ispage = "";
foreach ($array as $value) {
    if ($_SERVER['HTTP_REFERER'] != $value) {
        $ispage = "";
    } else {
    	$ispage = "woot";
    }
}
if ($ispage == "woot") {
    	echo $content;
    } else {
    	include_once 'about-header.php';
    	echo $content;	
    	include_once 'about-footer.php';
}

Sorun ... HTTP_REFERER a gem vurmak ve vuramamak olarak görünüyor. Ben ağda işteyim iken gayet güzel çalışıyor, ama ben evde bilgisayarımda bunu denedim ve açıkçası çalışmayı tamamen başarısız oluyor - sonuç korkunç: o

Bu ulaşmanın başka bir yolu var mı? Ben oturum değişkenleri kullanılabilir ama sonra bunun çok deneyimi yok ettik sanırım!

Any and all hints/tips are appreciated ;) Thanks!

edit:

Sayfa aslında bir personel profil sayfası. Normal konumu about.php ve 2 sütun div tıklandığında, AJAX ile o yerde profili yüklemek küçük bir kılavuz görüntüler. Tüm güzel ve basit - geri düğmesi fotoğrafların ızgara yeniden yükler.

Sorun her personel de statik bir sayfa ihtiyacı vardır. Ben yaklaşık / personel-name.php de bu oluşturduk. İçerik olsa AYNI olduğunu. Birisi hakkında / personel-name.php doğrudan gelir ve eğer öyleyse, bunun etrafında bir başlık / altbilgi sarın eğer sunucu algılamak istiyorum.

Istek resimleri (yani AJAX) ve ızgara geldi ise o üstbilgi / altbilgi sarıcı gerekmez.

Anlaşıldı mı? : O

1) If AJAX request - no wrapper 2) If not AJAX request - add header/footer wrapper

4 Cevap

Sadece içerik türü görüntülemek için komut söylemek için AJAX çağrısına bir bayrak geçmek daha kolay olmaz mıydı?

Edit:

Yani yaklaşık / personel-name.php içeriği görüntüler. AJAX diyoruz personel-name.php? FromAjax = 1 / yaklaşık olarak

Ardından yaklaşık / personel-name.php dosyasında:

if (isset($_REQUEST['FromAjax']) ) {
    echo $content;
} else {
    include_once 'about-header.php';
    echo $content;  
    include_once 'about-footer.php';
}

Ne olursa olsun, Referer üzerinize tüm web temel gereken bir bilgi değil: hangi araçları (en azından), istemci tarafından gönderilir:

  • the client does not necessarily have to send it
    • Bu tarayıcıda devre dışı bırakılabilir
    • bazı güvenlik duvarı / antivirüs çıkarın
  • Bu da sahte olabileceği / (firefox ile kolay bir şekilde yapmak için bir uzantısı kullanmak için) değiştirilmiş

Sen kesinlikle ne gerek yapmak için daha iyi / Saffer / daha güvenilir bir yol bulmak zorundadır.

Bir çözüm (which you already discarded) istek geliyor hangi sayfa söyleyerek, tüm bağlantıları bir additionnal bilgi aktarmak olacaktır. Benim görüşüme göre, bu muhtemelen yapılacak en iyi şey olurdu ...

Belki basit bir yolu nereden geldiğini söyleyerek, Ajax isteği bir parametre eklemek olacaktır? yani, yerine PHP komut Referer'a güvenmek, sadece bazı "referer tür" olarak hareket edeceğini, hangi istek bir parametre bir göz var, ama sizin tarafınızdan koydu?

Bu, en azından, modifiye / devre dışı olmaz, (users could still forge request, with that parameter) daha güvenli olacak, ama olmaz (except if the user does it by hand)


Sonunda, aynı zamanda bu demek:

1) If AJAX request - no wrapper
2) If not AJAX request - add header/footer wrapper

Peki, bu PHP komut dosyası bir Ajax isteği ile çağrılmış, burada da, iki çözüm belirlenmesi meselesi ise:

  • Bu Ajax aracılığıyla bitince Talebine bir parametre ekleme (yalnızca isteği yaparken JS komut dosyası bu parametre eklemek ve burada parametre olduğunda, PHP bir Ajax isteği bilir)
  • Veya, PHP komut dosyası, değeri ile burada sık sık bir X-Requested-With HTTP başlık bakmak XMLHttpRequest, bir istek, bir Ajax çağrısı yoluyla yapıldığında. (But you should check that it's set with your JS Framework / or maybe it depends on the browser -- not sure about that :-( )

Neden sadece başlık ve bitişin ve profil bit dahil, tüm ajax kullanmadan sunucu üzerinde statik sayfalar oluşturmak değil mi? Sayfa statik ise, javascript kullanarak içerik yüklemek için herhangi bir ihtiyaç olmamalıdır.

Eğer javascript kullanarak yüklemek gerekiyveya, sonra Vex'in çözüm iyidir. Sen sayfası oluşturulur nasıl kontrol ajax arama isteğe bağlı olan bazı parametreler geçebileceği - bu şekilde, birlikte sayfa kullanmak sayfaları hakkında bilmeniz gerekmez, sadece nasıl işlemek için bunu söylemek parametreleri anlamak gerekir kendisi. Daha sonra gelecekte daha kolay yeniden kullanabilirsiniz.

Ben ancak senin kodunda bir hata fark etmedi - beklendiği gibi bu muhtemelen çalışmayacaktır:

$ispage = "";
fveyaeach ($array as $value) {
    if ($_SERVER['HTTP_REFERER'] != $value) {
        $ispage = "";
    } else {
        $ispage = "woot";
    }
}

Bir sayfa adı ile eşleşen, ancak daha sonra bir sonraki durumda değilse, $ ispage geri'' kurulacaktır. Sen gibi bir şey yapıyveya, muhtemelen daha iyi edersin:

$ispage = "";
fveyaeach ($array as $value) {
    if ($_SERVER['HTTP_REFERER'] == $value) {
        $ispage = "woot";
        break;
    }
}

veya

$ispage = '';
if (in_array($_SERVER['HTTP_REFERER'], $array)) {
    $ispage = 'woot';
}

Tai kucing -

Bu gibi bağlantılar biçimlendirin:

<a href="http://www.this-is-a-link.html?setvariablehere=yes">link</a>

Sonra php sadece bu olması gerekir:

if (isset($_REQUEST['setvariablehere']) ) {
    do something for when variable IS set
} else {
    do something for when variable IS NOT set
}