सवाल यदि वर्तमान एएसपी.NET सत्र शून्य है तो मुझे क्या करना चाहिए?


मेरे वेब एप्लिकेशन में, मैं सत्र चर को पढ़ने के लिए ऐसा कुछ करता हूं:

if (HttpContext.Current.Session != null &&  HttpContext.Current.Session["MyVariable"] != null)
{
    string myVariable= (string)HttpContext.Current.Session["MyVariable"];
}

मैं समझता हूं कि क्यों जांचना महत्वपूर्ण है कि क्यों HttpContext.Current.Session ["MyVariable"] शून्य है (हो सकता है कि वेरिएबल सत्र में संग्रहीत नहीं हो सकता है या सत्र विभिन्न कारणों से रीसेट कर दिया गया है), लेकिन मुझे जांच करने की आवश्यकता क्यों है अगर HttpContext.Current.Session शून्य है?

मेरी समझ यह है कि सत्र स्वचालित रूप से एएसपी.NET द्वारा बनाया जाता है इसलिए HttpContext.Current.Session कभी शून्य नहीं होना चाहिए। क्या यह धारणा सही है? यदि यह शून्य हो सकता है, तो इसका मतलब यह है कि मुझे इसमें कुछ संग्रहीत करने से पहले इसे भी देखना चाहिए:

if (HttpContext.Current.Session != null)
{
    HttpContext.Current.Session["MyVariable"]="Test";
}
else
{
    // What should be done in this case (if session is null)?
    // Is it possible to force the session to be created if it doesn't exist?
}

111
2017-09-05 08:34


मूल


एएसपी.नेट वेबएपी के पास अलग व्यवहार होगा, आप इसे देख सकते हैं एएसपी.नेट वेब एपीआई का उपयोग कर सत्र तक पहुंच - Tiago Gouvêa


जवाब:


हां, सत्र वस्तु शून्य हो सकती है, लेकिन केवल कुछ परिस्थितियों में, जो आप शायद ही कभी ही भाग लेंगे:

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

संपादित करें

टिप्पणी के जवाब में: सत्र स्थिति उपलब्ध है या नहीं, इस पर निर्भर करता है कि अनुरोध के लिए AcquireRequestState ईवेंट चलाया गया है या नहीं। यह वह जगह है जहां सत्र राज्य मॉड्यूल सत्र कुकी पढ़ने और आपके लिए सत्र चर के एप्रोपिएट सेट को ढूंढकर काम करता है।

नियंत्रण से पहले AcquireRequestState चलाता है आपके पृष्ठ को सौंप दिया जाता है। इसलिए यदि आप अपने पृष्ठ से स्थिर कक्षाओं सहित अन्य कार्यक्षमता को बुला रहे हैं, तो आपको ठीक होना चाहिए।

यदि आपके पास स्टार्टअप के दौरान प्रारंभिक तर्क प्रारंभ करने वाले कुछ वर्ग हैं, उदाहरण के लिए Application_Start ईवेंट पर या स्थिर निर्माता का उपयोग करके, सत्र स्थिति उपलब्ध नहीं हो सकती है। यह सब इस बात पर उबाल जाता है कि कोई मौजूदा अनुरोध है या AcquireRequestState चलाया गया है।

साथ ही, क्या क्लाइंट ने कुकीज को अक्षम कर दिया है, सत्र वस्तु अभी भी उपलब्ध होगी - लेकिन अगले अनुरोध पर, उपयोगकर्ता एक नए खाली सत्र के साथ वापस आ जाएगा। ऐसा इसलिए है क्योंकि क्लाइंट को सत्र स्टेटबैग दिया जाता है यदि उसके पास पहले से कोई नहीं है। यदि ग्राहक सत्र कुकी को परिवहन नहीं करता है, तो हमारे पास क्लाइंट की पहचान करने का कोई तरीका नहीं है, इसलिए उसे बार-बार एक नया सत्र सौंप दिया जाएगा।


141
2017-09-05 08:51



आज मुझे एक त्वरित अपडेट मिला। पेज कन्स्ट्रक्टर पर सत्र उपलब्ध नहीं है! केवल इनिट घटना पर या उसके बाद। - Nuno Agapito
मुझे बस एक HttpContext.Current.Session == null कोड मास्टर पेज के पेज_लोड ईवेंट द्वारा बुलाया गया कोड है। जाहिर है, यह कर सकते हैं एक पृष्ठ के संदर्भ में होता है। अगर मैं HttpContext.Current ऑब्जेक्ट का निरीक्षण करता हूं, तो इसके अधिकांश सदस्यों को प्रारंभ किया जाता है, लेकिन CurrentNotification और IsPostNotification एक त्रुटि फेंक देता है: {System.PlatformNotSupportedException}। जो कुछ भी कारण है, यह मुद्दा उत्पादन में नहीं हुआ है, जहां यह वर्षों से चल रहा है। प्लेटफॉर्म विंडोज सर्वर 2003 आर 2 एसपी 2 है, एप्लिकेशन में लक्ष्य ढांचा है .NET 3.5 और सत्र स्थिति सक्षम के साथ आईआईएस में चलता है। - R. Schreurs
मैंने यह भी पाया है कि, जब आईआईएस एक संसाधन फ़ाइल के लिए सीधा अनुरोध कर रहा है जो डिस्क पर मौजूद है, जैसे स्टाइल शीट, HttpContext.Current.Session `Application_AququireRequestState 'में कोड के लिए शून्य हो सकता है। पृष्ठ के लिए अनुरोध, हालांकि, कोड ऑब्जेक्ट को कोड पर उपलब्ध कराता है। यह कम से कम MVC.NET 4 के तहत है। - ingredient_15939


निम्नलिखित कथन पूरी तरह सटीक नहीं है:

"तो यदि आप अपने पृष्ठ से स्थिर कक्षाओं सहित अन्य कार्यक्षमता को बुला रहे हैं, तो आपको ठीक होना चाहिए"

मैं एक स्थिर विधि को बुला रहा हूं जो HttpContext.Current.Session के माध्यम से सत्र का संदर्भ देता है और यह शून्य है। हालांकि, मैं jQuery का उपयोग कर AJAX के माध्यम से एक webservice विधि के माध्यम से विधि को बुला रहा हूँ।

जैसा कि मैंने पाया यहाँ आप विधि पर एक साधारण विशेषता के साथ समस्या को ठीक कर सकते हैं, या वेब सेवा सत्र ऑब्जेक्ट का उपयोग कर सकते हैं:

हालांकि, एक वेब विधि के भीतर सत्र स्थिति तक पहुंचने के लिए एक चाल है, इसलिए आपको सत्र स्थिति प्रबंधन को सक्षम करना होगा:

[WebMethod (EnableSession = true)]

EnableSession मान निर्दिष्ट करके, अब आपके पास खेलने के लिए एक प्रबंधित सत्र होगा। यदि आप इस मान को निर्दिष्ट नहीं करते हैं, तो आपको सत्र ऑब्जेक्ट तक पहुंचने का प्रयास करते समय एक शून्य सत्र ऑब्जेक्ट मिलेगा, और संभवतः शून्य संदर्भ अपवादों में भाग लेने की संभावना अधिक होगी।

समाधान के लिए मैथ्यू कोज़ीर के लिए धन्यवाद।

बस सोचा कि मैं अपने दो सेंट जोड़ दूंगा।

ईडी


39
2018-02-07 08:40



धन्यवाद एड, सत्र वेबमाइट में शून्य के रूप में दिखाई दे रहा था - इसे जोड़कर इसे ठीक किया गया। +1 - fusi
खैर, जब आप किसी webservice में कॉल कर रहे हैं, तो आप पेज के मुकाबले एक और अनुरोध का उपयोग करते हैं, ताकि कथन अभी भी सही हो, आईएमओ। - driis
एमएसडीएन दस्तावेज़ यहाँ - the default value is false। एक जादू की तरह काम करता है। - benjineer
हाँ ... [WebMethod (EnableSession = true)] यह है ... - curiousBoy


यदि आपका सत्र उदाहरण शून्य है और आपकी 'ashx' फ़ाइल में है, तो बस 'IRequiresSessionState' इंटरफ़ेस को लागू करें।

इस इंटरफ़ेस में कोई सदस्य नहीं है इसलिए आपको कक्षा घोषणा (सी #) के बाद इंटरफ़ेस नाम जोड़ने की आवश्यकता है:

public class MyAshxClass : IHttpHandler, IRequiresSessionState

16
2018-01-05 10:31



अपलोडिफा अपलोड स्क्रिप्ट के साथ, मेरे लिए काम किया, धन्यवाद। - Renan
बहुत बहुत धन्यवाद, मेरे लॉगिन वर्ग में सत्र शून्य था। जब मैंने अपने कोड को अपने एएसएक्स हैंडलर में जोड़ा तो यह मेरी कक्षा पर सत्र भी बदल गया - Ateş Danış
मुझे लगता है कि यह सवाल काफी अच्छी तरह से जवाब देता है। बहुत बहुत धन्यवाद। - Sachin Joseph
आपने मुझे बचाया, बहुत बहुत धन्यवाद। - Burak Koray Balcı


एएसपी.नेट तकनीकी लेख

सारांश: एएसपी.नेट में, हर वेब पेज   System.Web.UI.Page से निकला है   कक्षा। पेज क्लास एक समेकित करता है   के लिए HttpSession ऑब्जेक्ट का उदाहरण   सत्र डेटा। पृष्ठ वर्ग खुलासा करता है   के लिए विभिन्न घटनाओं और तरीकों   अनुकूलन। विशेष रूप से,   ऑनइनिट विधि का उपयोग करने के लिए प्रयोग किया जाता है   पेज ऑब्जेक्ट की स्थिति आरंभ करें।   अगर अनुरोध में नहीं है   सत्र कुकी, एक नया सत्र कुकी   अनुरोधकर्ता को जारी किया जाएगा।

संपादित करें:

सत्र: शुरुआती लोगों के लिए एक अवधारणा

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


2
2017-09-05 08:46