2012-04-12 26 views
10

Web sayfası A'yı kullanıyorum. Kullanıcı verileri göndermek için bir formu tıklatır ve onu web sayfası B'ye götürür. Geri düğmesini tıklattığında, A web sayfasına ihtiyacım var önbellekten yüklenen sunucudan yenilenir. Bu var: <meta http-equiv="expires" content="0"> ama işe yaramıyor. Ayrıca B sayfasında bir değişken ayarlamayı denedim (php ile oturum değişkeni) ve ardından A sayfasına bakın ve varlığına göre yenileyin (ya da değil). Bu hatıra da işe yarayacak gibi görünüyor. Sayfa A: Bunun için temel kodudur Önbelleklenen sürümünü yüklemek yerine sunucudan yüklemek için zorla sayfa

<?php 
if(isset($_SESSION['reloadPage'])) { 
unset($_SESSION['reloadPage']); 
echo' 
<script> 
window.location.replace("/****/****/*****.php"); 
</script> 
'; 
} 
?> 

Ve sayfa B

: PHP çözümü ile

$_SESSION['reloadPage'] = 1; 

, sadece bitmeyen bir döngü içinde sayfayı yenileyin etmeye çalışır. Mantığımdaki bir şey eksik mi? Bu konuda gitmek için doğru yolu bu mu?

DÜZENLEME sayfayı önbelleğe tarayıcıya söylediğimde Araştırmamız sonucunda , yanı yenilemek tam sunucu tarafı zorlamak mı? İhtiyacım olan bu. Sayfanın tam sunucu tarafı yenilemesi. Kişisel JavaScript olmalıdır

+0

Görebildiğimiz bir çevrimiçi sürüm mü? –

cevap

5

Tamam bu yerine deneyin:

<?php 
    if(!session_id()) { 
     @session_start(); 
    } 
    header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); 
    header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); 
    header('Cache-Control: no-store, no-cache, must-revalidate'); 
    header('Cache-Control: post-check=0, pre-check=0', false); 
    header('Pragma: no-cache'); 

    if(isset($_SESSION['form_submitted'])) { 
     unset($_SESSION['form_submitted']); 
     header('Location: ?' . uniqid()); 
     #header('Refresh: 0'); 
    } 
?> 

Sen $ _SESSION ayarlamak gerekir [ 'form_submitted'] sayfasında = true 2.

+0

Umulduğu gibi çalışmıyor. Ama daha fazla düşünerek, sayfa önbelleğe almıyormuş gibi görünüyor ... Ama anlatabildiğimden sunucu tarafını ferahlamıyor. – mdance

+0

Ayrıca çalışmıyor. Kaybettim. – mdance

+0

Bakabileceğimiz bir çevrimiçi sürüm mü? –

0

...

window.location = "/****/****/*****.php" 

Ben senin döngü düzeltmek gerektiğini düşünüyorum.

+0

İnsanları google'a göndermeyi denediğini sanmıyorum. – AndrewR

+0

Aynı sonuçlar. Sorunun PHP mantığımla olduğuna inanıyorum ... – mdance

2

üçünün ile deneyin:

<meta http-equiv="cache-control" content="no-cache"> <!-- tells browser not to cache --> 
<meta http-equiv="expires" content="0"> <!-- says that the cache expires 'now' --> 
<meta http-equiv="pragma" content="no-cache"> <!-- says not to use cached stuff, if there is any --> 
0
<?php 
    session_start(); 
    if(isset($_SESSION['reloadPage'])) { 
    unset($_SESSION['reloadPage']); 
    echo' 
    <script> 
    window.location.replace("/****/****/*****.php"); 
    </script> 
    '; 
} 
?> 
+0

Oturum, sayfanın en üstünde zaten başlatıldı. – mdance

1
<?php 
    session_start(); 
    if(isset($_SESSION['reloadPage'])) { 
     unset($_SESSION['reloadPage']); 
      //no outputting code above header 
     header("Cache-Control: no-cache, must-revalidate"); 
     header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); 
     header("Location: http://www.mypage.com/"); 
    } 
?> 
+0

Çok fazla yönlendirme demişti ... ... ama bunun şu ana kadarki en iyi çözüm olduğuna inanıyorum. ReloadPage değişkenini doğru bir şekilde belirleyememiş gibi görünüyor. – mdance

+0

Başlığın önceden gönderilmiş olması olabilir, eğer başlıktan önce herhangi bir HTML veya eko/baskı veya belgeye çıkarılan başka herhangi bir şey gibi herhangi bir çıktı kodu varsa, başlığın ilk sırada olması gerekir. gönderildi. Bu genellikle bir "başlık zaten gönderilir" hatası verir, bu yüzden de unset olmayan bir oturum değişkeni olabilir ve bir döngüde devam eder, biraz etrafında oynamayı deneyebilir veya belirli bir değer için değişkeni kontrol edebilir ve bunu vb. – adeneo

1

Bu eski bir soru olduğunu biliyorum ve zaten cevabı var er (sunucudan yenilenemeyen). Bu yüzden jQuery'yi kullanarak bir çözüm paylaşmak istiyorum.

$('#back-button').click(function(){ 
    setTimeout(location.reload(true), 1000); 
}); 

Açıklama:
geri butonuna tıklayın gibi, setTimeout 1 saniye (1000 milisaniye) sonra tetiklenir olacaktır. Ardından, sayfa reload içinde parametre true olduğu için sunucudan yeniden yüklenecektir.

'u reload içine koyarsanız, false'u koyarsanız, sunucudan yeniden yüklenir, önbellekten yeniden yüklenir. Kaynak w3schools.

İlgili konular