/ / सत्र मान Startup.cs में सुलभ नहीं - c #, asp.net, session, asp.net-core, asp.net-core-mvc

सत्र मूल्य स्टार्टअप सीएस में उपलब्ध नहीं है - सी #, एएसपीनेट, सत्र, एएसपीनेट-कोर, एएसपीनेट-कोर-एमवीसी

अपने आवेदन में मैं चाहता हूं कि मैं सत्र चर प्राप्त करूं जिसे मैंने संग्रहीत किया है और जांचें कि क्या कोई उपयोगकर्ता मौजूद है। सत्र चर प्राप्त करने के लिए मैं जिस कोड का उपयोग करता हूं वह नीचे है:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// Some other default code.
app.UseSession();

app.Use((context, next) =>
{
int? userId = context.Session.GetInt32("User");
// Use the variable.

return next();
});
}

जब मैं डिबगर के साथ चर की जांच करता हूं तो यह खाली होता है और संदर्भ में इसका कोई मूल्य नहीं है।

मैंने सत्र कोड को काम करने के लिए विधि (विन्यास) में Startup.cs में निम्नलिखित कोड जोड़ा:

services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(20);
options.Cookie.HttpOnly = true;
});

अगर मैं सत्र को अपने नियंत्रक में इस तरह सेट करता हूं:

HttpContext.Session.SetInt32("User", user.Id);

और नीचे की तरह मेरे नियंत्रक में सत्र चर प्राप्त करें।

HttpContext.Session.GetInt32("User");

यह उम्मीद के मुताबिक काम करता है और मुझे मेरा मूल्य वापस मिल जाता है।

यह Startup.cs में काम क्यों नहीं करता है, और मैं इसे कैसे ठीक करूं?

उत्तर:

जवाब के लिए 3 № 1

मैंने आपके परिदृश्य को खंगाला और यह पुष्टि कर सकता है कि यह अपेक्षित रूप से काम करता है। मैं सत्र को मिडलवेयर और कंट्रोलर दोनों में एक्सेस करने में सक्षम हूं।

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

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

लेकिन अभी तक आपका कोड बिलकुल वैध दिखता है और मेरी मशीन पर काम करता है।