2009-10-16 17 views
10

पर "वेबपेज समाप्त हो गया है" क्या ब्राउज़र के लिए आवश्यकता है जब उपयोगकर्ता वापस बटन दबाता सर्वव्यापी "इस पृष्ठ समाप्त हो गया है" संदेश को दिखाने के लिए है?शो वापस बटन

एक webapp में वापस बटन का उपयोग करने से उपयोगकर्ता को रोकने के लिए कुछ उपयोगकर्ता के अनुकूल तरीके क्या हैं?

+4

बेहतर है

भाषा होगा:

session_cache_expire(60); // in minutes ini_set('session.cache_limiter', 'private'); 

/नोट अपने ऐप को डिज़ाइन करने के लिए बैक बटन का एक समझदार अर्थ है। जब मुझे बैक बटन का उपयोग करने की अनुमति नहीं है तो मुझे यह परेशान लगता है। – Peter

+0

पीटर, मैं सहमत हूं। ऐसे समय होते हैं (जैसे ई-कॉमर्स साइट की चेकआउट प्रक्रिया) जब आप उपयोगकर्ता को वापस जाने से रोकने के लिए प्रेरित हो सकते हैं। हालांकि, उस समस्या के लिए एक बेहतर सर्वर-साइड समाधान है जो मैं अपने उत्तर में सुझाता हूं। –

+0

@ पीटर, मैं पूरी तरह से सहमत हूं, लेकिन मैं वर्कफ़्लो से निपट रहा हूं इसलिए बैक बटन यहां लागू नहीं होता है। – mkoryak

उत्तर

9

ठीक है, डिफ़ॉल्ट कोई भी फ़ॉर्म पोस्ट के साथ काम कर रहे हैं, और उसके बाद उपयोगकर्ता वापस हिट और फिर से ताज़ा तो वे संदेश यह दर्शाता है कि ब्राउज़र डेटा को पुन: सबमिट कर रहा है देखेंगे द्वारा। लेकिन यदि पृष्ठ तुरंत समाप्त होने के लिए सेट है तो उन्हें रीफ्रेश भी नहीं करना पड़ेगा और वे देखेंगे कि पृष्ठ वापस आने पर संदेश समाप्त हो गया है।

दोनों संदेशों से बचने के लिए नीचे दिए कुछ कोशिश करने के लिए कर रहे हैं:

1) एक रूप के बजाय प्राप्त का उपयोग करें। यह इस बात पर निर्भर करता है कि आप क्या कर रहे हैं लेकिन यह हमेशा एक अच्छा समाधान नहीं है क्योंकि जीईटी अनुरोध पर अभी भी आकार प्रतिबंध हैं। और जानकारी क्वेरीस्ट्रिंग में पास की जाती है जो विकल्पों में से सबसे सुरक्षित नहीं है।

- या -

2) एक सर्वर साइड प्रदर्शन करना प्रपत्र पोस्ट के बाद एक अन्य पृष्ठ पर रीडायरेक्ट।

ऐसा लगता है कि इसी तरह के एक सवाल का जवाब यहां गया था:

Redirect with a 303 after POST to avoid "Webpage has expired": Will it work if there are more bytes than a GET request can handle?

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

2

आप HTTP हेडर में pragma-कैश नियंत्रण विकल्प निर्धारित करने की आवश्यकता: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9

हालांकि, देखने के प्रयोज्य बिंदु से, इस मामले को निरुत्साहित किया दृष्टिकोण है। मैं आपको अन्य विकल्पों की तलाश करने के लिए दृढ़ता से प्रोत्साहित करता हूं।

पुनश्च: के रूप में स्टीव द्वारा प्रस्तावित प्राप्त के माध्यम से पुनर्निर्देशन उचित तरीका है (या जे एस के साथ पेज आंदोलन की जाँच करें)।

0

मुझे यकीन है कि अगर यह मानक अभ्यास है नहीं कर रहा हूँ, लेकिन मैं आम तौर पर केवल IE के लिए एक हैडर वैरी नहीं भेज रहा द्वारा इस समस्या का समाधान। Apache में, आप httpd.conf में निम्नलिखित रख सकते हैं:

BrowserMatch MSIE force-no-vary 

RFC के अनुसार:

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

व्यावहारिक प्रभाव यह है कि जब आप किसी पोस्ट पर "वापस" जाते हैं, तो IE को इतिहास कैश से पृष्ठ मिलता है। सर्वर अनुरोध पर कोई अनुरोध नहीं है।मैं इसे HTTPWatch में स्पष्ट रूप से देख सकता हूं।

मुझे इस दृष्टिकोण के संभावित दुष्प्रभावों को सुनने में दिलचस्पी होगी।

1

Page_Load में निम्नलिखित कोड का उपयोग कर

Response.Cache.SetCacheability(HttpCacheability.Private) 
+0

यह .NET विशिष्ट है? – mkoryak

+0

हां, जहां तक ​​मुझे पता है – Jeremy

1

उपयोग निम्नलिखित session_start से पहले से एक का प्रयास करें: पीएचपी

+0

जिसमें यह भाषा सहायक होगी – mkoryak

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