2008-11-11 15 views
43

मैं कुछ वस्तु का ट्रैक रखने और सत्र आईडी का उपयोग करने की कोशिश कर रहा हूं क्योंकि वे उस ऑब्जेक्ट की कुंजीसत्र आईडी एएसपी.नेट एमवीसी में क्यों बदलता रहता है क्यों?

हालांकि सत्र 2-3 प्रत्येक पुनर्जन्म परिवर्तन यह वही नहीं रहना चाहिए?

HttpContext.Session.SessionID 

क्या मैं कोड का उपयोग कर रहा हूं।

उत्तर

47

मैंने देखा है कि एमवीसी के बिना भी ऐसा होता है। अगर मुझे सही याद है, तो एएसपी.NET सत्र सत्र में कुछ जगह रखे जाने तक नए सत्र आईडी को असाइन करता रहता है।

+0

यह सत्र खो देता है भले ही आप इसमें कुछ डाल दें। Web.config के अंदर मशीन कुंजी एकमात्र चीज है जो –

+0

को हल करती है केवल तभी जब कोई वेब फार्म शामिल होता है। और यदि आप उत्तर में से किसी एक में ओपी की टिप्पणी पढ़ते हैं, तो आप पाएंगे कि सत्र चर में कोई आइटम जोड़ने से समस्या ठीक हो गई है। – Maxam

+0

मेरे होस्टिंग प्रदाता के पास वेब फार्म नहीं है, और सत्र में सामान जोड़ने से इसे ठीक नहीं किया जाता है। मैंने अभी भी कुछ मिनटों के बाद इसे खोला - भले ही मेरे पास सत्र में बहुत सारी चीज़ें हों (लॉग इन यूज़र, उसकी दुकान टोकरी, ...) मैंने 2 होस्टिंग प्रदाताओं के साथ प्रयास किया –

2

मैं कुछ ट्रैक रखने के लिए TempData का उपयोग करने में देखता हूं।
ऑनलाइन कुंजी जनरेटर: http://aspnetresources.com/tools/keycreator.aspx यह ग्राहक के लिए है कि सर्वर फिर सेट करता है मशीन कुंजी लगता है और नया सत्र आईडी के साथ नया एक, हर कुछ मिनट है, जो तुलना में काफी कम है उत्पन्न करता है

+0

असल में सब मैं करना पड़ा था एक सत्र चर एक मूल्य निर्दिष्ट और है कि यह छड़ी बनाया .. – dswatik

0

अपने web.config में मशीन कुंजी को जोड़ने के साथ प्रयास करें यह होना चाहिए। पता नहीं है कि यह बग या फीचर है :)
इसके अलावा, आप अपना सत्र स्टेट टाइमआउट बढ़ा सकते हैं, जो मुझे डिफ़ॉल्ट रूप से 20min लगता है।

5

मैं एक .NET MVC गाड़ी आवेदन पर काम कर रहा हूँ और मैं Page_Load विधि Default.aspx.cs कोड में पाया करने के लिए

Session["myVar"] = "1234"; 

गयी। मैंने

<%= this.Session.SessionID %> 

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

3

यदि आप देखते हैं कि सत्र आईडी कुकी ब्राउज़र पर तब तक नहीं भेजी जाती है जब तक कि यह सर्वर पर उपयोग नहीं किया जाता है।

तो जब कोई पृष्ठ राउंडट्रिप्स नहीं है तो कोई मौजूदा सत्र आईडी कुकी नहीं है, इसलिए एक नया सत्र आईडी बनाया गया है, इसलिए यह यादृच्छिक है।

यह तार्किक है, यदि सत्र उपयोग में नहीं है तो ऐप को सत्र में जोड़ना क्यों परेशान है?

24

आपको सत्र वस्तु को Global.asax.cs के भीतर प्रारंभ करना चाहिए।

void Session_Start(object sender, EventArgs e) 
{ 
    HttpContext.Current.Session.Add("__MyAppSession", string.Empty); 
} 

इस तरह जब तक आपके ब्राउज़र विंडो बंद हो सत्र नहीं बदलेगा।

0

मुझे एएसपी.नेट वेब फॉर्म का उपयोग कर एक ही समस्या हो रही थी। मुझे बस समाधान के लिए global.asax फ़ाइल जोड़ना पड़ा और यह मेरे लिए तय किया गया।

0

जो मैं उपयोग कर रहा हूं, उसके ऊपर @jrojo और @Maxam से उत्तरों को सारांशित करना।

मैं सत्र स्टोर के रूप में AWS DynamoDB का उपयोग कर रहा हूं (प्रश्न के दायरे से बाहर, लेकिन नमूना देता है)।

NUGET के माध्यम से

जोड़ें पैकेज: स्थापित-पैकेज AWS.SessionProvider

अद्यतन वेब।config appSettings में कुंजी है:

<add key="AWSAccessKey" value="XXX" /> 
<add key="AWSSecretKey" value="YYY" /> 

और सत्र प्रदाता system.web रहे हैं:

<sessionState timeout="20" 
       mode="Custom" 
       customProvider="DynamoDBSessionStoreProvider"> 
    <providers> 
    <add name="DynamoDBSessionStoreProvider" 
     type="Amazon.SessionProvider.DynamoDBSessionStateStore, AWS.SessionProvider" 
     AWSProfilesLocation=".aws/credentials" 
     Table="ASP.NET_SessionState" 
     Region="us-east-1" 
     /> 
    </providers> 
</sessionState> 

सत्र प्रारंभ होते ही Global.asax में सत्र के लिए कुछ भी जोड़ें:

void Session_Start(object sender, EventArgs e) { 
    HttpContext.Current.Session.Add("somethingToForceSessionIdToStick", string.Empty); 
} 

द्वारा सत्यापित करें इसे किसी भी पेज के रेज़र में जोड़ना। कि पृष्ठ को ताज़ा करें, तो एक Ignito विंडो खोलें और किसी दूसरे सत्र देखें:

@HttpContext.Current.Session.SessionID 

BobsYourUncle

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