我有一个经典的ASP网站,我在用户登录时创建一个字典,然后将该字典存储在会话变量中,如此...
dim objDict
set objDict = server.createobject("scripting.dictionary")
' processing here to fill dictionary
set session("user") = objDict
这一切都很好用,但是当我导航到另一个页面并尝试从存储的字典中访问一个值时......
session("user").item("id")
我收到以下错误...
error '80020009'
有人能告诉我我是否错误地访问了存储的字典?将字典对象存储在会话变量中是一件坏事/坏事吗?
由于
答案 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对象只是存储对象。