क्या कारण हो रहा है "सत्र राज्य ने एक सत्र आईडी बनाई है, लेकिन इसे सहेज नहीं सकते क्योंकि प्रतिक्रिया पहले ही आवेदन द्वारा निकाल दी गई थी।"


80

मुझे यह गलती रुक-रुक कर हो रही है।

मुझे यह लिंक मिला, जो Google पर मेरे द्वारा खोजे जा सकने वाले काम को अच्छी तरह से सारांशित करता है: http://www.wacdesigns.com/2009/02/03/session-state-has-created-a-session-id-but- नहीं बचा सकता है, क्योंकि यह-प्रतिक्रिया-पहले से ही-निस्तब्ध-से-आवेदन / था

मूल रूप से यह कहता है कि आप वेब कॉन्फिग सेटिंग डिसप्लेव्हेनशन सेशन को सेट करने की कोशिश कर सकते हैं, या सेशन_ऑनस्टार्ट में सेशन.सैनीड को प्राप्त करके सत्र स्टेट चीज को जीवन में किक करने का प्रयास कर सकते हैं।

लेकिन क्या कोई:

a) इसके लिए एक स्पष्टीकरण है

या इससे भी बेहतर, b) की कोशिश की और परीक्षण किया फिक्स है

मुझे एहसास है कि मैं कुछ भी करने के बाद प्रतिक्रिया को फ्लश नहीं कर सकता हूं जो http प्रतिक्रिया हेडर को प्रभावित करेगा। अगर मैंने ऐसा किया है तो यह हर बार एक त्रुटि का कारण होगा लेकिन यह रुक-रुक कर है। ASPX पेज या Page_Load में कुछ भी करने से पहले सत्र प्रतिक्रिया निश्चित रूप से ASP.NET द्वारा स्वचालित रूप से पृष्ठ प्रतिक्रिया की शुरुआत में बनाई जानी चाहिए (जहां मेरे सभी फ़्लश कहा जाता है)।

अपडेट: प्रतिबिंब पर मुझे एहसास होता है कि फाइल को ब्राउजर में डाउन करने पर यह हो रहा है। अधिकांश ब्राउज़र वास्तव में खोज इंजन बॉट हैं। मैं एक डाउनलोड शुरू करके और फिर ब्राउज़र को बंद करके इस त्रुटि को फिर से बना सकता हूं, इसलिए संभवतः ब्राउज़र डाउनलोड ऑपरेशन को रद्द करने से पहले डाउनलोड के पूरा होने की प्रतीक्षा नहीं कर रहे हैं। मैंने इसे अन्य, सामान्य पृष्ठों पर भी देखा है, लेकिन 99% यह डाउनलोड पृष्ठ हैं।


1
मुझे भी ठीक यही समस्या है। इसका एकमात्र कारण मैंने इसे तब देखा जब मैंने Global.asax में अपवाद हैंडलिंग को रखा। यह बहुत रुक-रुक कर चल रहा है। अगर किसी को इसका जवाब पता हो तो बहुत अच्छा होगा!
स्कॉट फर्ग्यूसन

6
लिंक अब टूट गया है :-(
केसबैश

जवाबों:


85

मेरे पास है!

Global.asax फ़ाइल में आप ऐसा करते हैं:

void Session_Start(object sender, EventArgs e) 
{
    // Code that runs when a new session is started
    string sessionId = Session.SessionID;
}

इतना आसान। यह काम करता हैं!


क्या यह एक सार्वजनिक / संरक्षित तरीका है - जैसा कि यह अपने निजी तौर पर खड़ा है, मुझे लगता है कि इसे संरक्षित किया जाना चाहिए। क्या नमूना पूरा हो गया है, यह तथ्य कि सेशनआईडी को बचाया नहीं गया है, मुझे लगता है कि यह ठीक है - इसकी रचना का ट्रिगर जो महत्वपूर्ण है, ठीक है?
क्रिस किम्प्टन

धन्यवाद। मुझे लगता है कि यह आम तौर पर काम करता है इसलिए मैं इसे स्वीकृत उत्तर के रूप में चिह्नित करूंगा, हालांकि मैं 100% सुनिश्चित नहीं हूं। क्या कोई टिप्पणी कर सकता है कि क्या उन्हें कोई ऐसा मामला मिला जहाँ यह काम नहीं करता है? धन्यवाद।
माइक नेल्सन

मैंने बस इस विधि को अपनी Global.asax फ़ाइल में जोड़ा और इसे मेरे त्रुटि संदेश से छुटकारा मिल गया, जो कि प्रश्न के समान था, बहुत बहुत धन्यवाद!
vanhornRF

इससे मेरी समस्या हल हो गई (मैं फ़्लश कर रहा था) लेकिन क्या आप जानते हैं कि यह समाधान के रूप में क्यों काम करता है?
एमिकेबल

इस जवाब ने मुझे अभी कई घंटे बचाए हैं। कभी इसका अनुमान नहीं लगाया होगा। धन्यवाद!
हॉकी

23

यह त्रुटि तब प्रतीत होती है जब:

  • आवेदन शुरू

  • यदि आप Session_Start / End घटनाओं में कुछ कर रहे हैं या नहीं, तो आप Global.asax का उपयोग कर रहे हैं

  • आपका आवेदन प्रतिक्रिया के फ्लश को भी जल्द ही बल देता है

  • आप फ्लश से पहले सत्र का उपयोग नहीं कर रहे हैं

यह सत्र राज्य द्वारा उठाया जाता है जब यह रिलीज़ पर सेशन को बचाने की कोशिश करता है:

System.Web.SessionState.SessionIDManager.SaveSessionID(HttpContext context, String id, Boolean& redirected, Boolean& cookieAdded)
System.Web.SessionState.SessionStateModule.CreateSessionId()
System.Web.SessionState.SessionStateModule.DelayedGetSessionId()
System.Web.SessionState.SessionStateModule.ReleaseStateGetSessionID()
System.Web.SessionState.SessionStateModule.OnReleaseState(Object source, EventArgs eventArgs)
System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

मेरा मानना ​​है कि Global.asax की उपस्थिति के कारण सत्र ID को SessionStateModule (देर से?) द्वारा जारी किए जाने पर बचाया जा सकता है, भले ही सत्र सत्र को HttpSessionState के बजाय किसी सत्र का उपयोग नहीं किया गया हो।

यही कारण है कि स्ट्रिंग सत्रId = सत्र। सत्रआईडी; चाल समस्या से बचें।

मुझे लगता है कि यह केवल इनिशियलाइज़ेशन बिहेवियर की वजह से ही शुरू होता है।

समाधान / चाल :

  • जैसा कि पहले ही कहा गया था Page_Load में फ्लशिंग से बचें

  • पृष्ठ पर सत्र स्थिति का वर्णन करें (EnableSessionState)

  • फ्लश से पहले SessionID ट्रिक का उपयोग करें

  • .Flush () के स्थान पर Response.End () का उपयोग करें यदि आप त्रुटियों के बारे में परवाह नहीं करते हैं जो आपके फ्लश के बाद हो सकती हैं


6

मेरा मानना ​​है कि यहाँ मुद्दा ठीक यही हो सकता है कि आप कुछ कर रहे हैं Page_Load, जिसके दौरान पृष्ठ आउटपुट का कारण बन सकता है , जो कि ASP.NET पेज के अनुसार, जीवनचक्र अवलोकन रेंडरिंग स्टेज से बहुत पहले है।

सुनिश्चित करें कि आप कभी भी ऐसा कुछ न करें जो PreRenderमंच के बाद तक पृष्ठ आउटपुट को ट्रिगर कर सके ।


धन्यवाद, मैं आज रात उस पर एक नज़र डालूंगा। यह सुनिश्चित नहीं है कि यह रुक-रुक कर क्यों होगा?
माइक नेल्सन

एक अनुचित घटना में एक प्रतिक्रिया हो सकती है?
जोश ई

3

खुद इस समस्या में भाग लेने के बाद, मैंने सोचा कि मैं अपने निष्कर्षों को साझा करूँगा।

Web.config सेटिंग DisplayWhenNewSession अप्रासंगिक है क्योंकि यह केवल कोडप्लेक्स पर एक विशेष कस्टमकंट्रोल पर लागू होता है (क्षमा करें, मैंने लिंक खो दिया है)।

अन्य सुझाव SessionId को जल्दी शुरू करके काम करने के लिए प्रकट होता है। मैंने रिफ्लेक्टर का उपयोग करते हुए कोड में खोदा और देखा कि यह कैसे यहाँ त्रुटि को रोक सकता है, लेकिन यह निश्चित रूप से हमारे लिए काम करता है!

इस बग में चलने वाले अधिकांश लोगों की तरह, हम स्पष्ट रूप से एप्लिकेशन में कहीं भी Response.Flush () कॉल नहीं कर रहे हैं। हम रिकॉर्ड के लिए भी एमवीसी का उपयोग कर रहे हैं।


0

मैं मानता हूं कि यह बहुत पुराना है, लेकिन मुझे त्रुटि का एक और कारण मिला जो दूसरों पर लागू हो सकता है। यदि आप MVC का उपयोग कर रहे हैं (मैं .Net 4.0 के साथ MVC 4 का उपयोग कर रहा था) और आप web.config तत्व का उपयोग करके बफर न करने के लिए पृष्ठ सेट करते हैं।

<pages buffer="false">    

तब यदि आपके कोड में आप डेटा को सत्र ऑब्जेक्ट में धकेलने का प्रयास करते हैं, तो हो सकता है कि यह त्रुटि हो रही हो अगर पेज ने आपके बच्चे के दृश्य या कार्रवाई को सत्र राज्य एक्सेस करने से पहले रेंडर करना शुरू कर दिया हो।

ऐसे मामलों में, आप बफर सेटिंग को सही पर बदलकर त्रुटि को ठीक कर सकते हैं। वैकल्पिक रूप से, अपने सत्र एक्सेस कोड को मुख्य दृश्य में ले जाएं और चाइल्ड एक्शन / चाइल्ड व्यू में नहीं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.