2010-04-21 27 views
26

के साथ एएसपी.NET प्रमाणीकरण लॉगिन और लॉगआउट मैं उपयोगकर्ता के लिए एक समाधान की तलाश कर रहा हूं, जो ब्राउजर के बैक बटन को लॉग आउट करने के बाद पिछले पृष्ठ पर नेविगेट करने के लिए उपयोग करता है।ब्राउज़र बैक बटन

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

बेशक वे उस पृष्ठ पर कुछ भी नहीं कर सकते हैं, किसी भी लिंक पर क्लिक करें जिसे वे फिर से लॉगिन पृष्ठ पर रीडायरेक्ट करेंगे। लेकिन उन सूचनाओं को प्रदर्शित करने से बहुत सारे उपयोगकर्ता उलझन में आ रहे हैं।

मैं सोच रहा हूं कि क्या कोई तरीका है कि मैं ब्राउज़र के इतिहास को साफ़ कर सकता हूं, इसलिए उपयोग वापस नहीं जा सकता है, या जब वे बैक बटन पर क्लिक करते हैं और उन्हें लॉगिन पृष्ठ पर रीडायरेक्ट करते हैं।

धन्यवाद

+1

+1। अच्छे प्रश्न के लिए +1 खराब निष्कर्ष के लिए केवल मुश्किल से बाहर निकला -1। –

+0

जो मेरी आलस्य से बाहर था ~ इसे फिर से प्रयास करें – Eatdoku

उत्तर

21

ब्राउज़र इतिहास और वापस बटन के बारे में चिंता आप सिर दर्द और जननांगों पर मस्से देने के लिए जा रहा है। इस समस्या को संभालने के लिए निर्मित सुविधाएं हैं।

आपका लॉगआउट लिंक/बटन इस कोड वाले किसी पृष्ठ को इंगित करना चाहिए, जो भी आप चाहते हैं।

[vb.net]

Imports System.Web.Security 

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _ 
Handles MyBase.Load 
    Session.Abandon() 
    FormsAuthentication.SignOut() 
End Sub 

[C#]

using System.Web.Security; 

private void Page_Load(object sender, System.EventArgs e) 
{ 
    // Put user code to initialize the page here 
    Session.Abandon(); 
    FormsAuthentication.SignOut(); 
} 

कोड इस page से आता है और मान्य है, लेकिन पेज आंखों पर कठिन है।

बैकबटन व्यवहार के संबंध में एक अच्छा प्रश्न/उत्तर here पाया जा सकता है।

अद्यतन: बातचीत मैं मैथ्यू के साथ चल रहा है, अलग-अलग पृष्ठों है कि संवेदनशील होते हैं या volitile कोड के साथ किया जा सकता है पर कैशिंग को अक्षम करने के लिए

अनुसार इस प्रकार है जैसे:

Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1)); 
Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.Cache.SetNoStore(); 

मैं कर रहा हूँ जानना उत्सुक है कि यह आपके लिए काम करता है क्योंकि यह मेरे लिए करता है।

+3

यह इस प्रश्न का उत्तर नहीं है। – nima

+0

क्या यह सीएसएस/जेएस के कैशिंग को अक्षम भी करेगा? धन्यवाद: डी –

+0

@ स्की सैंडर्स - रुको, क्या आपने किसी को उत्तर में जवाब नहीं दिया है कि Response.Cache.SetCacheability (HttpCacheability.NoCache) क्या वह "उसका दिमाग खो रहा था?"। भले ही, मुझे अभी भी आपका जवाब – deebs

3

आप बैक बटन को अक्षम करने के लिए जावास्क्रिप्ट का उपयोग कर सकते हैं (आमतौर पर उपयोगकर्ता को उस पृष्ठ पर भेजकर जो दूसरे पृष्ठ पर आगे भेजता है, ताकि वापस क्लिक करने से आपको आगे भेज दिया जा सके)। एक सतत उपयोगकर्ता अभी भी इतिहास में 2 कदम पीछे जा सकता है और लूप पर कदम उठा सकता है।

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

+1

मैथ्यू पसंद है, समस्या को संभालने के लिए कार्यक्षमता बनाने पर एक हैक का सुझाव क्यों दिया जाता है? –

+0

सत्र। एबैंडन और फॉर्म प्रमाणीकरण। साइनऑट ब्राउज़र को इसके कैश को साफ़ करने के लिए नहीं बताता है (और ब्राउजर और प्रॉक्सी को बीच में कैश हेडर का सम्मान नहीं करना पड़ता है) कैश किए गए पृष्ठ अभी भी लोड हो सकते हैं, और यदि कोई सत्र को रिक्त करने के बाद क्लाइंट कैश में किसी पृष्ठ से अनुरोध किया जाता है, कोई परिणाम नहीं बताता कि परिणाम क्या होगा, संभवतः पृष्ठ के रूप में NullReferenceExceptions सत्र चर (और लॉगऑन पेज पर रीडायरेक्ट) की जांच शुरू होता है। – MatthewMartin

+0

तब संवेदनशील या अस्थिर पृष्ठों पर कोई-कैश को अलग-अलग सेट नहीं किया जाना चाहिए जिसे पुनरुत्थान नहीं किया जाना चाहिए। आप ग्राहक को नियंत्रित नहीं कर सकते हैं और जटिलता को जोड़कर कोशिश कर सकते हैं। अगर वे 3 क्लिक वापस करना चाहते हैं तो 'पेज समाप्त हो गया है' लॉग आउट करने के बाद ..?!? उन्हें अधिक शक्ति। वैसे भी, मैं सिर्फ आपको नहीं कह रहा हूँ ... पी। यह सुनिश्चित करने के लिए @sky का उपयोग करें कि मुझे टिप्पणियों पर प्रतिक्रिया मिलती है। –

-3

वास्तव में मुझे एक समाधान मिला, मैंने मास्टर पेज के पेज लोड विधि में निम्न स्निपेट जोड़ा। जबाब वैसे भी के लिए

Page.Response.Cache.SetCacheability(HttpCacheability.NoCache); 

धन्यवाद :)

+7

अरे, चारों ओर मुड़ें, मुझे लगता है कि आपने अपना दिमाग कहीं खो दिया है ... ;- यह एक स्लेजहैमर के साथ घड़ी को ठीक करने की कोशिश करने जैसा है। इसे दयालु रखने के लिए, यह एक डीडब्ल्यूटीएफ के लिए अर्हता प्राप्त करता है। कृपया पुनर्विचार करें। –

+0

ठीक है !! ... मुझे इसे फिर से प्रयास करने दें :) – Eatdoku

0

आप HttpResponse उपयोग करने का प्रयास कर सकते हैं।अगर है कि मदद कैश संपत्ति होगा:

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”; 

या आप कर सकते थे वास्तव में पागल हो जाना और हाथ से यह सब कार्य करें:

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 

Reference

1

इस कोड को बहुत उपयोगी है

Response.Cache.SetCacheability(HttpCacheability.NoCache); 

केवल लोड घटना पर इस कोड डाल दिया, मामले में मास्टर pagen पर, लेकिन यह केवल, IE के लिए काम करता है IE और Firefox के लिए मैं

Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.Cache.SetNoStore(); 
1

Your Answer इस्तेमाल किया

<script type="text/javascript"> 
window.history.forward(1); 
</script> 
:

इस के लिए एक वैकल्पिक हल logout.aspx पृष्ठ के अनुभाग के लिए जावास्क्रिप्ट कोड निम्नलिखित जोड़ने के लिए है

यह जावास्क्रिप्ट कोड उपयोगकर्ता को वापस वापस लाएगा यदि उपयोगकर्ता बैक बटन दबाकर लॉगआउट पेज पर जाता है।

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

Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1)); 
Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.Cache.SetNoStore(); 
एक अच्छे प्रश्न के लिए