想象一下,我有一个“Employee”类的实例(oEmp),我想将它存储起来。
Session["CurrentEmp"] = oEmp;
如果我在oEmp中修改属性,如下所示:
oEmp.Ename = "Scott";
我是通过上述陈述引用会话项目还是仅仅是“oEmp”?
Session["CurrentEmp"] = oEmp; //Do we still need this after any property is modified
如果我选择了SQL Server会话状态(而不是InProc),情况是否相同。
感谢
答案 0 :(得分:7)
Asp.net Session将保留引用,因此您不需要执行以下操作:
Session["CurrentEmp"] = oEmp;
修改oEmp后;
答案 1 :(得分:2)
我正在更新我的回复,因为我对会话数据序列化的理解不正确。我不打算删除这个答案,因为它可能有助于其他人了解会话的工作原理。我要感谢@Guru指出这一点。
无论会话模式如何,仅当请求成功时,会话数据才会更新回会话对象。因此,如果您已将参考对象分配给会话,然后在同一请求中更新对象,则会话将保留更新的信息。
请参阅:Underpinnings of the Session State Implementation in ASP.NET了解更多信息
答案 2 :(得分:2)
会话变量作为参考类型保存,因此无需每次都更新其值 您存储的对象实例,只有对该对象的引用存储在会话变量中。
以下链接可帮助您找到更多详情
http://bytes.com/topic/asp-net/answers/447055-reference-types-session
http://forums.asp.net/t/350036.aspx/1
Do asp.net application variables pass by reference or value?