4

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

谢谢

4

3 回答 3

7

Asp.net Session 将保存引用,因此您不需要执行以下操作:

Session["CurrentEmp"] = oEmp;

修改oEmp后;

于 2013-05-01T15:52:16.757 回答
2

我正在更新我的回复,因为我对会话数据序列化的理解不正确。我不会删除此答案,因为它可能有助于其他人了解会话的工作方式。我会感谢@Guru 指出这一点。

无论会话模式如何,只有在请求成功时,会话数据才会更新回会话对象。因此,如果您已将引用对象分配给会话,然后在同一请求中更新该对象,则会话将保存更新的信息。

请参阅:ASP.NET 中会话状态实现的基础以获取更多信息

于 2013-05-01T16:03:36.447 回答
2

会话变量作为引用类型保存,因此无需每次都更新其值。
您存储的对象实例,只有对该对象的引用存储在会话变量中。

这里有一些链接可以帮助您找到更多详细信息

http://bytes.com/topic/asp-net/answers/447055-reference-types-session

http://forums.asp.net/t/350036.aspx/1

asp.net 应用程序变量是通过引用还是值传递?

于 2013-05-01T16:04:45.597 回答