Sayfayı yenileyerek insanları durdurmak

11 Cevap php

Bana F5 ya da herhangi bir refresh düğmesine bastığında herkes bunun yerine kullanıcının istediği sayfasını ferahlatıcı, farklı bir sayfaya taşınmış olacak şekilde çalışması için yine de var mı?

Gibi bir şey:

If (refresh){

  goto "link to hopme page"

}

Benim belli bir sayfada serinletici izin vermemesi zaten orada değilse?

Ben sadece non stop yeniliyoruz ve bu benim bant genişliği öldürüyor bazı insanlar var. O yüzden ben ip ban istemiyorum bir oyun sitesidir.

11 Cevap

session_start();
if($_SESSION['hasbeenhere'] == 1)
{
 // Page refreshed
}
else
{
   $_SESSION['hasbeenhere'] = 1;
}

Kişi tanımlama etkin yoksa, bu başarısız olur. Birisi başka bir sayfaya gider ve geri gelirse, tazelenmiş olarak gösterilecektir.

Genel olarak, güzelliğinde bir şekilde bunu yapamazsınız, ama bu kez aynı sayfayı görmesini birisi önlemek için 1 yoludur.

Eğer F5 200 kez basarak insanları durdurmak istiyorsanız çünkü yorumun, bu deneyin.

$page = $_SERVER['REQUEST_URI'];
// Defaults
if(!isset($_SESSION[$page]['count']))
{
    $_SESSION[$page]['count'] = 1;
    $_SESSION[$page]['first_hit'] = time();
    $_SESSION[$page]['banned'] = false;
}
else
{
    $_SESSION[$page]['count']++; // Increase the counter
}

// If person is banned, end script
if($_SESSION[$page]['banned'] == true)
{
    die();
}

if($_SESSION[$page]['first_hit'] < time() - 30)
{
    $_SESSION[$page]['count'] = 1; // Reset every 30 seconds
}

if($_SESSION[$page]['count'] > 100)
{
    $_SESSION[$page]['banned'] = true; 
    // Ban if they hit over 100 times in 30 seconds.
}

Belki size sayfasını kullanarak bant genişliğini azaltmaya yerine çaba odaklı olması gerekmektedir. Görüntü sıkıştırma, sayfa optimizasyonu ve önbelleğe alanları keşfetmek.

Niye isteyeyim?

Ama hayır, bu durduramaz sürekli çalışmak hiçbir yolu yoktur.

PHP kodu, aşağıdakileri yapın:

 if(isset($_SESSION["pagename-LAST_VIEWED"])) {
    v = $_SESSION["pagename-LAST_VIEWED"])
    if(time() - v < 15) {
       // user is refreshing more than once per 15 seconds
       // send them something else and die
       }
 }
 $_SESSION["pagename-LAST_VIEWED"] = time();

Benim günlük dil değil, benim köhne pseudo-PHP görmezden Lütfen.

Bu and sadece tekrar veya presleme imini tıklayarak kullanıcı tekrar adres çubuğuna girin sayfa yenileme (F5) hem de önleyecektir.

Ayrıca some Hiç sunucu isabet yeniler engel olan bazı agresif önbelleğe alma meta etiketleri ve HTTP başlıklarını sağlayabilir, ancak yukarıdaki kod oldukça ölçeklenebilir olmalıdır.

Başka bir şey düşünmek: kök sorun diğer kod, senin kullanıcıları. Onlar bir zamanlanmış gecikme AJAX ile görmek istediğiniz kısmını otomatik güncellemeleri yüzden sayfanızı yeniden düşünün. Bu onlara Yenile kullanmamayı teşvik verecek, ve sunucu sadece güncellenmiş görmek istediğiniz veri küçük biraz yenilemek zorunda tarafından baş yardımcı olacaktır.

Bu işe olsaydı hiçbir fikrim yok, ama javascript ile tuş vuruşlarını için dinlemek ve F5 Tuşa basıldığında, ne istersen yap.

Bunu yapabilirim sanırım:

session_start();

if (isset($_SESSION['visited'])) {
    header("Location: http://the.page/you/want");
} else {
    $_SESSION['visited'] = true;
}

Ferahlatıcı gelen F5 durdurmak için, herhangi bir tür ferahlatıcı izin vermez olurdu. Bir hack olarak, sorgu dizesi bir zaman damgası koyarak deneyebilirsiniz. Yük üzerinde, zaman damgası değerini kontrol edebilirsiniz ve geçmişte ise, başka bir sayfaya yönlendirme. Çerezleri devre dışı bırakılırsa, bu işe olur.

Sitenin kendisi Javascript ile yapar, bu yüzden bir şey düzenleme yaparken, üzerinde bunu sağlar JQuery tarafından tanımlanmış bazı Olay muhtemelen vardır, geri gidiyor, serinletici vb gevşek, böylece içine bakmak ve yok Bu olay, (muhtemelen aynı etki alanı içinde olmalıdır) istediğiniz sayfaya yönlendirme.

Bu soruna iyi bir teknik çözüm (diğer cevaplar oldukça iyi olduğunu örtülü) olduğu gibi geliyor bana. Kullanıcıların sürekli bu sayfada yenileme isabet varsa, onlar sayfa değiştirmek için bekliyoruz çünkü öyle tahmin ediyorum ve onlar kadar-saniyelik bilgi istiyorum. Belki sayfayı yenilemek isteyen gerekçesini götürmek gerekir. Bunu yapmanın en kolay yolu, muhtemelen sayfa (AJAX olasılıkla) kendisini güncellemek yapmak olacaktır. Böylece kullanıcı oturabilir ve güncellemeleri sadece rulo olacak - daha iyi bir kullanıcı deneyimi olması söz değil, bant genişliği aşağı kesecek olan, artık çekiçleme F5.

Bu doğrudan soruya cevap değil ama muhtemelen önbelleğe yapamazsın ile sorunu çözebilir?

If you send a header Cache-Control: public,max-age=120 That should instruct the browser that it doesn't need to request the page again for 2 minutes and can just use the copy from it's cache. If course they can use alt-f5 to force a refresh but it ought to help a lot?

Ben sadece çok basit bir çözüm bulmak.

I tüm $ _POST bilgiyi işlemek ve $ _SESSION var içine ihtiyacım olanları kaydettikten sonra benim için ben bunu:

$_SESSION['admin']['PID']=session_id();
$_SESSION['admin']['user_user']=$_POST['user'];
$_SESSION['admin']['user_pass']=$_POST['pass'];
$_SESSION['admin']['last_access_time']=time();
if($_SERVER['REQUEST_METHOD']==="POST")
{
    header("LOCATION:".$_SERVER['PHP_SELF']."?p=redirected");
}

Benim durumumda ben kullanıcıyı doğrulamak için çalışıyordu, ve ben birisi çıkış ve ve bu basit ile geri dönüp tekrar sitesi yükü yenileyin ve ne zaman ı nihayet çözüldü eğer sorun var.

PD:.? "P = yönlendirildi" yalnızca test porpouse içindir