我可以将Scripting Dictionary存储在会话变量中吗?

时间:2010-01-16 04:06:03

标签: asp-classic dictionary session-variables

我有一个经典的ASP网站,我在用户登录时创建一个字典,然后将该字典存储在会话变量中,如此...

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

这一切都很好用,但是当我导航到另一个页面并尝试从存储的字典中访问一个值时......

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

我收到以下错误...

error '80020009'

有人能告诉我我是否错误地访问了存储的字典?将字典对象存储在会话变量中是一件坏事/坏事吗?

由于

2 个答案:

答案 0 :(得分:5)

您收到的错误是远程过程调用错误。我无法解释为什么你得到这个错误或为什么提取到局部变量修复它。

但是我可以说它真的很糟糕。在Session对象中存储此类对象时,会在执行脚本的当前线程与会话之间创建关联。因此,此会话的所有后续请求现在必须仅由此特定线程处理。如果该线程正忙于处理某个elses请求,则即使有大量可用的工作线程,也会将会话请求排队。因此,在Session中存储对象会严重损害应用程序的可伸缩性。

我还质疑将词典存储在已经是字典的东西中的智慧吗?

为什么不只是用户: -

Dim userID : userID = Session("user_id")

您通常存储在“用户”字典中的任何内容(例如“id”)只会有前缀“user_”并直接存储在会话中?

答案 1 :(得分:2)

当您想要访问代码时,您是否尝试过执行以下操作?

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

试一下,看看它是否有效。我不认为这是必要的,但Classic ASP并不是最强大的语言。您想要做的事情应该是可行的,因为Session对象只是存储对象。