2009-07-28 10 views
5

मैं क्लासिक एएसपी के लिए नया हूं और मुझे क्लासिक एएसपी में एक वेब एप्लिकेशन कोड करने की आवश्यकता है क्योंकि ग्राहक क्लासिक एएसपी में होना चाहता है। ! :(सत्र ऑब्जेक्ट में क्लासिक एएसपी स्टोर ऑब्जेक्ट्स

फिर भी

यहां मेरे सवाल यह है:

जब मैं एक वर्ग कहा जाता है व्यक्ति की एक वस्तु है:

Class Person 
Private m_sFirstName 

Public Property Get firstName 
firstName = m_sFirstName 
End Property 

Public Property Let firstName(value) 
    m_sFirstName = value 
End Property 

End Class 


set aPerson = new Person 
Person.firstName = "Danny" 

set Session("somePerson") = aPerson 

अब तक तो अच्छा ...

पर अगला अनुरोध, मैं सत्र var को पढ़ने की कोशिश करता हूं जैसे:

If IsObject(Session("aPerson")) = true Then 
    set mySessionPerson = Session("aPerson") 

     Response.Write(TypeName(myTest)) // will output "Person" 
     Response.Write(mySessionPerson.firstName) // will output "Object doesn't support this property or method: 'mySessionPerson.firstName' 
End If 

क्या हो रहा है इसके बारे में कोई भी विचार बहुत मददगार होगा।

उत्तर

1

नहीं यह

If IsObject(Session("somePerson")) = true Then 
    set mySessionPerson = Session("somePerson") 
+0

इससे कोई फर्क नहीं पड़ता क्योंकि एएसपी क्लासिक में ऑब्जेक्ट्स को क्रमबद्ध नहीं किया जा सकता है। –

+0

क्षमा करें उदाहरण के लिए मैं –

+0

@ जेफ़री में गड़बड़ कर रहा हूं: एएसपी और सत्रोबजेक्ट में "क्रमबद्धता" की कोई अवधारणा नहीं है। – AnthonyWJones

3

मैं व्याख्या नहीं कर सकते क्यों अपने कोड काम नहीं करता है मेरे लिए ठीक लग रहा है होना चाहिए।

ऑब्जेक्ट एक स्क्रिप्ट संदर्भ में बनाया गया है जिसे अनुरोध पूरा होने के बाद बाद में फेंक दिया जाता है। इसलिए जब प्रकार का नाम उपलब्ध होता है तो वस्तु का कार्य टूट जाता है।

मैं आपको सत्र में वस्तुओं को स्टोर करने के लिए एक अच्छा विचार नहीं बता सकता, यहां तक ​​कि स्क्रिप्ट में नहीं बनाए गए हैं।

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

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

समग्र प्रभाव अनुप्रयोग स्केलेबिलिटी को नुकसान पहुंचाना है जहां वर्क लोड वर्कर थ्रेड में असमान रूप से वितरित किया जा सकता है।

+0

मैंने इसे देखा है। प्रदर्शन सत्र और आवेदन में वस्तुओं की बढ़ती संख्या के साथ अव्यवस्थित है। – ssorrrell

2

आप यह कर सकते हैं लेकिन आपको थोड़ा स्नीकी होना है। इसकी मेरी समझ यह है कि जब आप सत्र में घर बेक्ड ऑब्जेक्ट स्टोर करते हैं तो वह सभी डेटा रखता है लेकिन सभी कार्यक्षमता खो देता है। कार्यक्षमता को वापस पाने के लिए आपको सत्र से डेटा को "पुनः हाइड्रेट" करना होगा।

एएसपी के लिए JScript में यहाँ एक उदाहरण है:

<%@ Language="Javascript" %> 
<% 

function User(name, age, home_town) { 

    // Properties - All of these are saved in the Session 
    this.name = name || "Unknown"; 
    this.age = age || 0; 
    this.home_town = home_town || "Huddersfield"; 

    // The session we shall store this object in, setting it here 
    // means you can only store one User Object per session though 
    // but it proves the point 
    this.session_key = "MySessionKey"; 

    // Methods - None of these will be available if you pull it straight out of the session 

    // Hydrate the data by sucking it back into this instance of the object 
    this.Load = function() { 
     var sessionObj = Session(this.session_key); 
     this.name = sessionObj.name; 
     this.age = sessionObj.age; 
     this.home_town = sessionObj.home_town; 
    } 

    // Stash the object (well its data) back into session 
    this.Save = function() { 
     Session(this.session_key) = this; 
    }, 

    this.Render = function() { 
     %> 
     <ul> 
      <li>name: <%= this.name %></li> 
      <li>age: <%= this.age %></li> 
      <li>home_town: <%= this.home_town %></li> 
     </ul> 
     <% 
    } 
} 

var me = new User("Pete", "32", "Huddersfield"); 
me.Save(); 

me.Render(); 

// Throw it away, its data now only exists in Session 
me = null; 

// Prove it, we still have access to the data! 
Response.Write("<h1>" + Session("MySessionKey").name + "</h1>"); 

// But not its methods/functions 
// Session("MySessionKey").Render(); << Would throw an error! 

me = new User(); 
me.Load(); // Load the last saved state for this user 

me.Render(); 

%> 

इसकी काफी सत्र में राज्य को बचाने के प्रबंधन और आसानी से डीबी के लिए बाहर swopped किया जा सकता का एक शक्तिशाली प्रणाली को बुलाती है/एक्सएमएल आदि यदि आवश्यक हो तो।

एंथनी ज्ञान की गहराई को जानकर, थ्रेड के बारे में क्या सोचता है, मुझे यकीन है कि यह सही है और इसके बारे में सोचने के लिए कुछ है, लेकिन यदि यह एक छोटी सी साइट है, तो आप इसे दूर करने में सक्षम होंगे, हमने इसका इस्तेमाल इस पर किया है बिना किसी वास्तविक समस्या के वर्षों के लिए मध्यम आकार की साइट (10K आगंतुकों को एक दिन)।

0

मैं एक COM ऑब्जेक्ट बनाउंगा जो VB6 के साथ आपकी व्यक्तिगत श्रेणी की तरह दिखता है। फिर उसे स्टोर करें। कोड बहुत समान है।

पीट की विधि शायद काम करती है।

-1

मैं तुम्हारे लिए यह परीक्षण करने के लिए आलसी करने के लिए कर रहा हूँ, लेकिन

के बजाय

:

set Session("somePerson") = aPerson 

प्रयास करें:

Set Session("somePerson") = Server.CreateObject(aPerson) 
0

इस तरह सेट सत्र डेटा:

set Session.Contents("UserData") = UserData 

और फिर इसे इस तरह प्राप्त करें:

Session.Contents("UserData.UserIsActive") 
संबंधित मुद्दे