2010-01-16 70 views
2

我有,我創建字典時,在字典中,像這樣一個會話變量的用戶登錄,然後商店...我可以在會話變量中存儲腳本字典嗎?

dim objDict 
set objDict = server.createobject("scripting.dictionary") 
' processing here to fill dictionary 
set session("user") = objDict 

這一切工作正常,很正常,傳統的ASP網站,但,當我瀏覽到另一頁並嘗試從這樣的存儲的詞典訪問值...

session("user").item("id") 

我得到以下錯誤...

error '80020009' 

任何人都可以告訴我,如果我正確訪問存儲的字典嗎?將字典對象存儲在會話變量中是否有錯誤/錯誤的事情?

感謝

回答

2

你有沒有在你的代碼做類似下面的東西時,你要訪問它試圖?

Dim objDict 
Set objDict = session("user") 
Response.Write objDict("id") 

試試看看它是否有效。我不認爲這將是必要的,但經典的ASP並不完全是最強大的語言。你想要做的事情應該是可行的,因爲Session對象只是存儲對象。

+0

什麼時候你釋放這個對象?如果執行1000次請求會怎麼樣? – Edelcom 2010-01-16 09:19:26

+0

好吧,如果你要走這條路線,當你使用它之後,或者如果你在代碼中有一個「清理」部分,你肯定應該打電話給Set objDict = Nothing。儘管說實話,我確實喜歡AnthonyWJones的答案......實際上,存儲在本詞典中的任何內容都可以直接存儲在會話中,一般來說。雖然,也許OP有這樣做的理由,但我不知道。 – eidylon 2010-01-16 16:00:59

+0

'Set objDict = Nothing'在這種情況下並沒有真正實現。 – AnthonyWJones 2010-01-16 21:54:07

5

您正在收到的錯誤是遠程過程調用錯誤。我無法解釋爲什麼你會得到這個錯誤,或者爲什麼提取到一個本地變量修復它。

但是我可以告訴它它真的是個壞主意。當您在Session對象中存儲這樣的對象時,您可以在執行腳本的當前線程和會話之間創建一個關聯關係。結果,該會話的所有後續請求現在必須僅由該特定線程處理。如果該線程恰好忙於處理某人的請求,則會話請求會排隊,即使有大量可用的工作線程可用。因此,在會話中存儲對象可能會嚴重損害應用程序的可伸縮性。

我還會質疑在已經是字典的東西中存儲字典的智慧嗎?

爲什麼不只是用戶: -

Dim userID : userID = Session("user_id") 

如有任何事情,你通常都存儲在「用戶」的字典,如「身份證」,也只會前綴「用戶_」,並在direcly存儲會議?

相關問題