我可以这样修改ASP.NET会话对象吗?

时间:2013-05-01 15:44:08

标签: asp.net

想象一下,我有一个“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),情况是否相同。

感谢

3 个答案:

答案 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?