2008-08-22 10 views
7

उपयोगकर्ता को एएसपीनेट ऐप में कैश किए गए किसी पृष्ठ पर वापस जाने के लिए सबसे अच्छा तरीका क्या है? क्या बैक बटन (इवेंट?) को कैप्चर करने और उस तरह कैश को संभालने का कोई अच्छा तरीका है?कैश और ब्राउजर बैक बटन से निपटने का सबसे अच्छा तरीका क्या है?

+0

http: // stackoverflow देखें।कॉम/प्रश्न/20088616/ब्राउजर-बैक-बटन-शो-द-पेज-से-कैश –

उत्तर

6

आपको लगता है कि अगर मदद मिलेगी HttpResponse.Cache property उपयोग करने का प्रयास कर सकते हैं:

Response.Cache.SetExpires(DateTime.Now.AddSeconds(60)); 
Response.Cache.SetCacheability(HttpCacheability.Public); 
Response.Cache.SetValidUntilExpires(false); 
Response.Cache.VaryByParams["Category"] = true; 

if (Response.Cache.VaryByParams["Category"]) 
{ 
    //... 
} 

या HttpResponse.CacheControl साथ पूरी तरह पेज की कैशिंग ब्लॉक सकता सका, लेकिन इसकी ऊपर कैश संपत्ति के पक्ष में पदावनत किया गया:

Response.CacheControl = "No-Cache"; 

संपादित करें: वास्तव में go nuts और यह सब करते हैं या आप सकता है हाथ से:

Response.ClearHeaders(); 
Response.AppendHeader("Cache-Control", "no-cache"); //HTTP 1.1 
Response.AppendHeader("Cache-Control", "private"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "no-store"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "must-revalidate"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "max-stale=0"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "post-check=0"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "pre-check=0"); // HTTP 1.1 
Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.1 
Response.AppendHeader("Keep-Alive", "timeout=3, max=993"); // HTTP 1.1 
Response.AppendHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT"); // HTTP 1.1 
0

इससे निपटने का सबसे अच्छा तरीका शायद आपके एएसपी.नेट पृष्ठों में एक कैश निर्देश डालना है (या यदि आप एक का उपयोग कर रहे हैं तो एक मास्टर पेज)। मुझे नहीं लगता कि सीधे आपके एएसपी.NET कोड में इसका निपटारा करने का एक तरीका है (क्योंकि ग्राहक पर कैश का निर्णय हो रहा है)।

एमवीसी के लिए, यह नहीं पता कि आप इसे कैसे पूरा करेंगे (मान लें कि यह वेब फॉर्म-आधारित एएसपी.नेट से अलग है); मैंने इसका इस्तेमाल नहीं किया है।

6

मैं जानता हूँ कि जहाँ तक (या कम से कम पढ़ा है) "पेज में" उपयोगकर्ता घटनाओं की प्रतिक्रिया में काम करने के लिए नहीं की कोशिश, बल्कि सोचने के लिए अपने सबसे अच्छे रूप है ..

वास्तुकार तो यह नहीं करता है आपके आवेदन अगर बैक बटन धक्का दिया जाता है तो यह परवाह नहीं करेगा .. यह सिर्फ इसके साथ सौदा करेगा .. इसका मतलब विकास के दृष्टिकोण से थोड़ा अतिरिक्त काम हो सकता है, लेकिन समग्र रूप से एप्लिकेशन को और अधिक मजबूत बना देगा ..

आईई यदि चरण 3 कुछ डेटा chages निष्पादित करता है, तो उपयोगकर्ता वापस क्लिक करता है (चरण 2 तक) और फिर से क्लिक करता है, फिर एप्लिकेशन यह देखने के लिए जांच करता है कि परिवर्तन किए गए हैं या नहीं। या आदर्श रूप से, यह हार्ड परिवर्तन नहीं करता है जब तक उपयोगकर्ता अंत में "ठीक" पर क्लिक नहीं करता .. इस तरह, सभी परिवर्तन संग्रहीत होते हैं और आप प्रत्येक बार लोड पर पहले दर्ज किए गए मानों के आधार पर फ़ॉर्म को दोहरा सकते हैं ..

मुझे आशा है कि यह समझ में आता है:)

+0

-1 व्यावहारिक एक से अधिक आदर्श उत्तर। कुछ ऐप्स शुरुआत से एक विशेष तरीके से निराश हो गए हैं, जब कड़े बजट के साथ एक बड़ी टीम में काम करते हैं तो यह व्यापार हितधारकों को किसी भी स्पष्ट लाभ के बिना आर्किटेक्चर को बदलने में संसाधनों को डुबोने के लिए एक बहुत कठिन बिक्री होगी। इसके अलावा यह वास्तव में सवाल का जवाब नहीं दे रहा है। –

2

RFC 2616 §13.13 का कहना है कि इतिहास और कैश अलग बातें हैं। कैश को बैक बटन को प्रभावित करने के लिए बिल्कुल कोई रास्ता नहीं होना चाहिए।

यदि HTTP शीर्षलेख का कोई भी संयोजन बैक बटन को प्रभावित करता है, तो यह ब्राउज़र में एक बग है ... एक अपवाद के साथ।

HTTP में एस ब्राउज़रों व्याख्या Cache-control: must-revalidate जब वापस बटन प्रयोग किया जाता है पृष्ठों को ताज़ा करने के अनुरोध के रूप में (मोज़िला यह "मूर्खतापूर्ण बैंक मोड" कॉल)। यह सादा HTTP में समर्थित नहीं है।

0

निम्नलिखित कोड IE9 +, FF21 और नवीनतम क्रोम में मेरे लिए काम किया:

Response.Cache.SetCacheability(HttpCacheability.NoCache | HttpCacheability.Private); 
Response.Cache.AppendCacheExtension("must-revalidate"); 
Response.Cache.AppendCacheExtension("max-age=0"); 
Response.Cache.SetNoStore(); 

आप masterpage में Page_Load() ईवेंट हैंडलर में इस जगह कर सकते हैं ताकि आपके एप्लिकेशन के प्रत्येक पृष्ठ पर एक राउंड ट्रिप की आवश्यकता है बैक बटन दबाते समय सर्वर।

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