2010-06-21 13 views
8

मेरे पास कई चर हैं जिन्हें मुझे पृष्ठ से पृष्ठ पर भेजने की आवश्यकता है ... ऐसा करने का सबसे अच्छा तरीका क्या है?एएसपी.नेट; कई सत्र चर या "कंटेनर ऑब्जेक्ट"?

बस उन्हें एक एक करके भेजें:

string var1 = Session["var1"] == null ? "" : Session["var1"].ToString(); 
int var2 = Session["var2"] == null ? 0 : int.Parse(Session["var2"].ToString()); 

और इतने पर ...

या उन सब को कंटेनर-वस्तु के कुछ प्रकार में डाल?

struct SessionData 
{ 
    public int Var1 { get; set; } 
    public string Var2 { get; set; } 
    public int Var3 { get; set; } 
} 

-

SessionData data = Session["data"] as SessionData; 

सबसे अच्छा समाधान क्या है? तुम क्या इस्तेमाल करते हो?

+0

5 मिनट में 5 जवाब ... मुझे एसओ: डी –

उत्तर

6

दोनों का एक संकर सबसे अधिक रखरखाव दृष्टिकोण है। Session एक कम प्रतिबाधा, लचीला कुंजी-मूल्य जोड़ी स्टोर प्रदान करता है, इसलिए इसका लाभ उठाने के लिए यह अपमानजनक होगा। हालांकि, डेटा के जटिल टुकड़ों के लिए हमेशा एक दूसरे से संबंधित हैं - उदाहरण के लिए, एक उपयोगकर्ता प्रोफाइल - यह गहराई से घोंसला वाली वस्तु रखने के लिए समझ में आता है।

+0

पसंद है, लेकिन आप सत्र में उपयोगकर्ता आईडी या प्रोफाइल आईडी क्यों नहीं स्टोर करेंगे और बाकी के लिए डीबी का उपयोग क्यों करेंगे? –

+3

तब से आप हर बार डीबी हिट की कीमत लेते हैं, जो तर्कसंगत रूप से कोड का सबसे धीमा क्षेत्र है। – JustLoren

0

मुझे नहीं लगता कि मैंने प्रत्येक सत्र में स्टोरेज के लिए अन्य ऑब्जेक्ट्स को बंडल करने के लिए ऑब्जेक्ट बनाया है, इसलिए शायद मैं पहले विकल्प के साथ जाऊंगा। उस ने कहा, यदि आपके पास ऐसी बड़ी संख्या में ऑब्जेक्ट्स हैं जिन्हें आपको काम करना आसान बनाने के लिए उन्हें बंडल करने की आवश्यकता है, तो आप अपने आर्किटेक्चर को दोबारा जांचना चाहेंगे।

2

सभी डेटा है कि आप सत्र में भंडारण कर रहे हैं से संबंधित है, तो मैं अपने दूसरे उदाहरण की तरह एक वस्तु में consolodating सुझाव है:

public class UserData 
{ 
    public string UserName { get; set; } 
    public string LastPageViewed { get; set; } 
    public int ParentGroupId { get; set; } 
} 

और फिर सब कुछ एक बार लोड और के लिए यह स्टोर अधिवेशन।

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

0

मैंने दोनों का उपयोग किया है। आम तौर पर, कई सत्र परिवर्तनीय नाम टकराव की संभावना का कारण बनते हैं, जो संग्रह को एक अधिक विश्वसनीय बनाता है। सुनिश्चित करें कि संग्रह सामग्री एक ही जिम्मेदारी से संबंधित है, जैसा कि आप किसी भी वस्तु के लिए करेंगे। (वास्तव में, व्यापार वस्तुओं सत्र वस्तुओं के लिए उत्कृष्ट उम्मीदवारों बनाते हैं।)

दो सुझाव:

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

दूसरा, सुनिश्चित करें कि प्रत्येक ऑब्जेक्ट [Serializable] विशेषता के साथ चिह्नित है। यदि आपको कभी भी सत्र स्थिति से बाहर की स्थिति को सहेजने की आवश्यकता है, तो यह आवश्यक है।

1

मैं एक SessionHandler है, जो एक कस्टम लुढ़का वर्ग है कि इस

public static class SessionHandler 
{ 
    public static string UserId 
    { 
     get 
     { 
      return Session["UserId"]; 
     } 
     set 
     { 
      Session["UserId"] = value; 
     } 
    }  
} 

की तरह लग रहा है और फिर कोड में मैं

var user = myDataContext.Users.Where(u => u.UserId = SessionHandler.UserId).FirstOrDefault(); 
+0

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

+1

उम्मीद है कि नाम * सत्र * हैंडलर इसे साफ़ करता है;) – JustLoren

0

एक वस्तु का बड़ा प्लस कर का उपयोग करें: गुण strongly- हैं आपके द्वारा लिखा गया।

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