2012-04-12 19 views
10

लोड करने के बजाए सर्वर से पुनः लोड करने के लिए फोर्स पेज को मेरे पास वेबपृष्ठ ए है। उपयोगकर्ता डेटा जमा करने के लिए फॉर्म पर क्लिक करता है, और उसे वेबपृष्ठ बी पर ले जाता है। जब वह बैक बटन पर क्लिक करता है, तो मुझे वेबपृष्ठ ए की आवश्यकता होती है सर्वर से रीफ्रेश किया जाए, बल्कि कैश से लोड किया गया हो। मेरे पास यह है: <meta http-equiv="expires" content="0"> लेकिन यह काम नहीं करता प्रतीत होता है। मैंने पेज बी (सत्र चर के माध्यम से सत्र चर) पर एक चर सेट करने का भी प्रयास किया है और उसके बाद पेज ए पर इसकी जांच करें और इसके अस्तित्व के अनुसार रीफ्रेश करें (या नहीं)। यह काम भी काम करता प्रतीत होता है। उस के लिए बुनियादी कोड है: पृष्ठ A:कैश किए गए संस्करण

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

और पेज बी पर:

$_SESSION['reloadPage'] = 1; 
पीएचपी समाधान के साथ

, यह बस ख़त्म न होने वाली पाश में पृष्ठ को ताज़ा करने की कोशिश कर रखता है। मेरे तर्क में कुछ याद आ रही है? क्या यह इसके बारे में जाने का सही तरीका है?

संपादित आगे की जांच पड़ताल करने पर, जब आप ब्राउज़र बता पेज को कैश नहीं करने के लिए, कि एक पूर्ण सर्वर साइड रूप में अच्छी तरह से ताज़ा मजबूर करता है? मुझे इसी की जरूरत थी। पृष्ठ का एक पूर्ण सर्वर पक्ष ताज़ा करें।

+0

क्या वे एक ऑनलाइन संस्करण है जिसे हम देख सकते हैं? –

उत्तर

5

ठीक ऐसा करें:

<?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'); 
    } 
?> 

आप $ _SESSION सेट करने की आवश्यकता होगी [ 'form_submitted'] पृष्ठ पर सच = 2.

+0

उम्मीद के रूप में काम नहीं कर रहा है। लेकिन इसके बारे में सोचने पर, ऐसा लगता है कि यह पृष्ठ को कैश नहीं कर रहा है ... लेकिन, यह जो मैं बता सकता हूं उससे सर्वर की ओर से ताज़ा नहीं है। – mdance

+0

या तो काम नहीं कर रहा है। मैं एक नुकसान पर तरह। – mdance

+0

क्या वे एक ऑनलाइन संस्करण है जिसे हम देख सकते हैं? –

0

आपका जावास्क्रिप्ट होना चाहिए ...

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

मुझे लगता है कि अपने पाश ठीक करना चाहिए।

+0

मुझे नहीं लगता कि वह लोगों को Google को भेजने की कोशिश कर रहा है। – AndrewR

+0

वही परिणाम। मेरा मानना ​​है कि समस्या मेरे PHP तर्क के साथ है ... – mdance

2

तीनों के साथ प्रयास करें:

<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

सत्र पहले से ही पृष्ठ के शीर्ष पर शुरू हो गया है। – 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

यह बहुत सारे रीडायरेक्ट्स ने कहा ... हालांकि मुझे विश्वास है कि यह अब तक का सबसे अच्छा समाधान है। ऐसा लगता है कि यह reloadPage चर को सही ढंग से परेशान नहीं कर रहा है। – mdance

+0

यह हो सकता है कि हेडर पहले से ही भेजा जा चुका है, यह तब होगा जब हेडर से पहले कोई आउटपुट कोड हो, जैसे किसी HTML या echo/print, या दस्तावेज़ में आउटपुट होने वाली कोई भी चीज़, हेडर पहली बात होनी चाहिए भेज दिया। यह आमतौर पर "हेडर पहले से भेजा गया" त्रुटि देता है, इसलिए यह सत्र चर भी हो सकता है जो अनसेट नहीं होता है, और यह एक लूप में रहता है, थोड़ा सा झुकाव करने का प्रयास करें, या एक निश्चित मान के लिए चर जांचें, और सेट करें यह इसे परेशान करने के बजाय शून्य करने के लिए शून्य है। – adeneo

1

मुझे पता है कि यह पुराना प्रश्न है और पहले से ही answ है er (जो सर्वर से ताज़ा नहीं है)। तो मैं jQuery का उपयोग कर एक समाधान साझा करना चाहता हूँ।

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

स्पष्टीकरण:
तुम वापस बटन पर क्लिक करें रूप में, setTimeout 1 सेकंड (1000 मिलीसेकंड) के बाद शुरू हो जाएगा। फिर, पृष्ठ सर्वर से फिर से लोड हो जाएगा क्योंकि reload के अंदर पैरामीटर true है।

यदि आप के अंदर true डालते हैं तो यह सर्वर से फिर से लोड हो जाएगा, जबकि यदि आप false डालते हैं तो यह कैश से पुनः लोड हो जाएगा। स्रोत w3schools

संबंधित मुद्दे